https://school.programmers.co.kr/learn/courses/30/lessons/178870
๋ฌธ์ ์ค๋ช
๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์์ด์ด ์ฃผ์ด์ง ๋, ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ ์์ด์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
- ๊ธฐ์กด ์์ด์์ ์์์ ๋ ์ธ๋ฑ์ค์ ์์์ ๊ทธ ์ฌ์ด์ ์์๋ฅผ ๋ชจ๋ ํฌํจํ๋ ๋ถ๋ถ ์์ด์ด์ด์ผ ํฉ๋๋ค.
- ๋ถ๋ถ ์์ด์ ํฉ์ k์ ๋๋ค.
- ํฉ์ด k์ธ ๋ถ๋ถ ์์ด์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๊ธธ์ด๊ฐ ์งง์ ์์ด์ ์ฐพ์ต๋๋ค.
- ๊ธธ์ด๊ฐ ์งง์ ์์ด์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์์ชฝ(์์ ์ธ๋ฑ์ค๊ฐ ์์)์ ๋์ค๋ ์์ด์ ์ฐพ์ต๋๋ค.
์์ด์ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด sequence์ ๋ถ๋ถ ์์ด์ ํฉ์ ๋ํ๋ด๋ ์ ์ k๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ถ๋ถ ์์ด์ ์์ ์ธ๋ฑ์ค์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์์ด์ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํฉ๋๋ค.
์ ํ์ฌํญ
- 5 ≤ sequence์ ๊ธธ์ด ≤ 1,000,000
- 1 ≤ sequence์ ์์ ≤ 1,000
- sequence๋ ๋น๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ต๋๋ค.
- 5 ≤ k ≤ 1,000,000,000
- k๋ ํญ์ sequence์ ๋ถ๋ถ ์์ด๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ ๋๋ค.
์ ์ถ๋ ฅ ์
sequence k result
[1, 2, 3, 4, 5] | 7 | [2, 3] |
[1, 1, 1, 2, 3, 4, 5] | 5 | [6, 6] |
[2, 2, 2, 2, 2] | 6 | [0, 2] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
[1, 2, 3, 4, 5]์์ ํฉ์ด 7์ธ ์ฐ์๋ ๋ถ๋ถ ์์ด์ [3, 4]๋ฟ์ด๋ฏ๋ก ํด๋น ์์ด์ ์์ ์ธ๋ฑ์ค์ธ 2์ ๋ง์ง๋ง ์ธ๋ฑ์ค 3์ ๋ฐฐ์ด์ ๋ด์ [2, 3]์ ๋ฐํํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
[1, 1, 1, 2, 3, 4, 5]์์ ํฉ์ด 5์ธ ์ฐ์๋ ๋ถ๋ถ ์์ด์ [1, 1, 1, 2], [2, 3], [5]๊ฐ ์์ต๋๋ค. ์ด ์ค [5]์ ๊ธธ์ด๊ฐ ์ ์ผ ์งง์ผ๋ฏ๋ก ํด๋น ์์ด์ ์์ ์ธ๋ฑ์ค์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋ด์ [6, 6]์ ๋ฐํํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
[2, 2, 2, 2, 2]์์ ํฉ์ด 6์ธ ์ฐ์๋ ๋ถ๋ถ ์์ด์ [2, 2, 2]๋ก 3๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ๊ธธ์ด๊ฐ ์งง์ ์์ด์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ์์ชฝ์ ๋์จ ์์ด์ ์ฐพ์ผ๋ฏ๋ก [0, 2]๋ฅผ ๋ฐํํฉ๋๋ค.
๋ด ํ์ด
left ๊ฐ๊ณผ right ๊ฐ์ ์ต์ํ์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ์ฐพ๋๊ฒ ํต์ฌ์ด๋ค.
์ด์ค for๋ฌธ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
#include <vector>
#include <limits>
std::vector<int> solution(std::vector<int> sequence, int k)
{
std::vector<int> answer = {-1, -1};
int min_length = std::numeric_limits<int>::max();
int total = 0;
int left = 0;
for (int right = 0; right < sequence.size(); ++right)
{
// right ์ธ๋ฑ์ค์ ๊ฐ์ ๊ณ์ ๋ํ๋ค
total += sequence[right];
// ํฉ์น ๊ฐ์ด ๋ชฉํ๊ฐ๋ณด๋ค ์ปค์ง๋ฉด left ์ธ๋ฑ์ค๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ฉฐ
// ์ด์ ์ ๋ํ๋ left ์ธ๋ฑ์ค์ ๊ฐ์ ๋นผ์ค๋ค.
while (total > k)
{
total -= sequence[left];
++left;
}
// ํฉ์น ๊ฐ์ด k์ ๋๋ฌํ๋ฉด min_length๋ณด๋ค ์์์ง ํ์ธํ๋ค.
// ์๋ค๋ฉด ํ์ฌ left, right ๊ฐ์ answer์ ๋ฑ๋กํ๊ณ min_length๋ฅผ ๊ฐฑ์ ํ๋ค.
if (total == k && (right - left) < min_length)
{
answer[0] = left;
answer[1] = right;
min_length = right - left;
}
}
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์์ ์ง๊ฟ(C++) (1) | 2023.06.12 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.1 - ํธ๋ํฐ ๋ฒํธ ๊ฐ๋ฆฌ๊ธฐ(C++) (0) | 2023.06.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] level.2 - ์กฐ์ด์คํฑ(C++) (1) | 2023.06.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] level.2 - ๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ(C++) (0) | 2023.06.08 |
[ํ๋ก๊ทธ๋๋จธ์ค] level.2 - ๋ฏธ๋ก ํ์ถ(C++) (0) | 2023.06.07 |