๐Ÿง“2003๋ฒˆ. ์ˆ˜๋“ค์˜ ํ•ฉ2., ํˆฌํฌ์ธํ„ฐ, ํ•„๋…!

phoenixKimยท2022๋…„ 9์›” 5์ผ
0

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
108/174

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

: ํˆฌํฌ์ธํ„ฐ

๊ฒฝ๊ณ !

  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ƒ๊ฐํ•ด๋‚˜๊ฐ€๋ฉด์„œ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์Œ.

  • start ๊ฐ€ end๋ณด๋‹ค ์•ž์„œ๊ฒŒ ๋œ๋‹ค๋ฉด. end๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•จ.
    ์–ด๋–ค ๊ฒฝ์šฐ๋ƒ๋ฉด
  • ์—ฌ๊ธฐ์—์„œ 4 2 5 ๋ถ€๋ถ„ ์ค‘ 5๊ฐ€ 7์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, start๊ฐ€ end๋ณด๋‹ค ๋’ค๋กœ ๊ฐˆ์ˆ˜ ์žˆ๋‹ค.
    ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์™€์ผ๋ฌธ ๋๋‚จ.

ํŠน์ง•

    1. start ์™€ end ๊ฐ’์ด ๋™์ผํ•œ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Œ.
      ์ด๋•Œ, end๋งŒ ์ฆ๊ฐ€์‹œํ‚ค์ž.
      ์ˆœํ™˜๋ฌธ ๋Œ๋ฉด์„œ start ์ฆ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

ํ’€์ด์ „๋žต

  • ๋ฐ˜๋“œ์‹œ , end ์ธ๋ฑ์Šค๋ฅผ ์•ž์—์„œ ๋ถ€ํ„ฐ ์‹œ์ž‘ ํ•ด์•ผ ํ•จ.
  • ํ•ฉ ๊ณ„์‚ฐํ•˜๋ ค๋Š” ์ธ๋ฑ์Šค์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก, ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ•ฉ์ด ์ปค์ง.

์ฃผ์˜ํ• ์ .

    1. ๊ฐ ์กฐ๊ฑด๋งˆ๋‹ค, start์™€ end ์ธ๋ฑ์Šค ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š”๋ฐ, ๋‚ด๊ฐ€ ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ์˜
      ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Œ. ์ด์— ๋Œ€ํ•œ ์กฐ๊ฑด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•จ.
    1. start๊ฐ€ end๋ณด๋‹ค ๊ฐ’์ด ์ปค์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ.
      ์–ด๋– ํ•œ ๊ฒฝ์šฐ๋ƒ? ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฐ€์šด๋ฐ ์œ„์น˜์—์„œ ์›์†Œ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง€๊ณ  ํƒ€๊ฒŸ๊ฐ’๊ณผ ๋น„๊ต๋ฅผ ํ–ˆ๋Š”๋ฐ,
      ํƒ€๊ฒŸ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ, ์—ฌ๊ธฐ์„œ ์•„๋ฌด์กฐ๊ฑด ์—†๋‹ค๋ฉด, ์™€์ผ๋ฌธ์—์„œ ๋๋‚˜๋ฏ€๋กœ.
      ๊ณ„์† ์ง„ํ–‰ํ•ด์„œ, ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•ด์ค˜์•ผํ•จ.
      end๋„ start์™€ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•จ.
    1. ์œ„์˜ ํŠน์ง•์œผ๋กœ ์ธํ•ด์„œ while๋ฌธ์— start <= end // ๋“ฑํ˜ธ๋„ ํฌํ•จ๋˜์–ด์•ผ ํ•จ.

์—ฐ์Šต_1. ๋ธŒ๋ฃจํŠธํฌ์Šค ์ฐธ๊ณ 

์ฝ”๋“œ

#include <iostream>

using namespace std;

#include <vector>
#include <algorithm>

// 2003๋ฒˆ. ์ˆ˜๋“ค์˜ ํ•ฉ2
// 15:51 ~ 16:37

int main(void)
{
	int n, m;
	cin >> n >> m;

	vector<int>v(n);

	for (int i = 0; i < n; ++i)
	{
		cin >> v[i];
	}

	int start = 0;
	int end = 0;
	int sum = v[start];

	int res = 0;

	while (start <= end && end < v.size())
	{	
		if (sum < m)
		{
			++end;
			if (end >= n)
				break;
			sum += v[end];
		}
		else if (sum == m)
		{
			++res;						
			++end;
			if (end >= n)
				break;
			sum += v[end];

		}
		else if (sum > m)
		{
			sum -= v[start];
			++start;

			// start์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ.		
			// ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ•  ์ˆ˜ ์žˆ์Œ. 
			// ๊ฐ€์šด๋ฐ์—์„œ start์™€ end๊ฐ€ ๋™์ผํ•œ๋ฐ, 
			// start๋ฅผ ์ฆ๊ฐ€ํ•  ๊ฒฝ์šฐ. 
			// ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ž…๋ ฅ 2๋ฒˆ์— ํ•ด๋‹นํ•จ.
			// ๋’ท๋ถ€๋ถ„์˜ ์ธ๋ฑ์Šค๋„ ์ง„ํ–‰์„ ํ•ด์•ผํ•จ.

			if (start > end)
			{
				end = start;
				sum = v[start];
			}

		}

	}

	cout << res;

}
profile
๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด