[Programmers] Lv2. ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ | C++
2023. 6. 27. 18:10ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
์ ๋ ฅ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ 1,000,000๊ฐ์ด๋ ๋น์ฐํ \( O(n^2) \)์ผ๋ก๋ ๋ชป ํ๋๋ค. ์ฆ, ์ด์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก๋ ์ด๋ ต๊ฒ ๋ค๊ณ ์๊ฐํ์์ต๋๋ค. ๊ทธ๋์ ์ ๋ ๋ ๊ฐ์ ์ธ๋ฑ์ค ๋ณ์๋ฅผ ํตํด, ๋ฐ๋ณต๋ฌธ์ ํ ๋ฒ๋ง ๋๋๋ก ํ์ด๋ฅผ ๊ตฌ์ํ์์ต๋๋ค.
- ์์ ์ธ๋ฑ์ค(startIdx), ๋ ์ธ๋ฑ์ค(lastIdx), ํฉ๊ณ ๋ณ์(sum)๋ฅผ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํ์ฌ ์ ์ธํฉ๋๋ค.
- startIdx <= lastIdx ์ด๊ณ , lastIdx < sequence.size()๋ผ๋ฉด, while๋ฌธ์ ๋์์ค๋๋ค.
- sum + sequence[lastIdx] == k๋ผ๋ฉด, ๋ต์ ํ๋ณด ์ค ํ๋์ด๋ฏ๋ก ๋ณ๋๋ก ์ ์ฅํด ๋์ต๋๋ค.
- sum + sequence[lastIdx] < k๋ผ๋ฉด, sum += sequnece[lastIdx++]
- sum + sequence[lastIdx] >= k๋ผ๋ฉด, sum -= sequnece[startIdx++]
- ์์ ๊ฐ์ด ์กฐ๊ฑด๋ฌธ๋ค์ ์ง์ ํ์ฌ ๋ฐ๋ณตํด์ค๋๋ค.
- ๋ฐ๋ณต๋ฌธ์ด ๋๋ฌ๋ค๋ฉด, ์งง์ ๊ธธ์ด์ ์์ด์ด ์ ์ชฝ์ผ๋ก ๊ฐ๋๋ก ์ ๋ ฌํด์ค๋๋ค.
- ๊ธธ์ด๊ฐ ๊ฐ๋ค๋ฉด, ์์ ์ธ๋ฑ์ค๊ฐ ์์ ๊ฒ ์์ผ๋ก ๊ฐ๋๋ก ํด์ค๋๋ค.
- ์ ๋ ฌ ํ, ์ฒซ ๋ฒ์งธ ํ๋ณด์ ์์ ์ธ๋ฑ์ค์ ๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐฐ์ด์ ๋ด์ ๋ฆฌํดํด์ค๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
#include <algorithm>
using namespace std;
bool Compare(const pair<int, int>& n1, const pair<int, int>& n2) {
int n1Difference = abs(n1.first - n1.second);
int n2Difference = abs(n2.first - n2.second);
if (n1Difference == n2Difference)
return n1.first < n2.first;
return n1Difference < n2Difference;
}
vector<int> solution(vector<int> sequence, int k) {
vector<pair<int, int>> candidates;
int startIdx = 0, lastIdx = 0;
int sum = 0;
while (startIdx <= lastIdx and lastIdx < sequence.size()) {
int nextSum = sum + sequence[lastIdx];
if (nextSum == k)
candidates.emplace_back(startIdx, lastIdx);
if (nextSum < k)
sum += sequence[lastIdx++];
else
sum -= sequence[startIdx++];
}
sort(candidates.begin(), candidates.end(), Compare);
vector<int> answer {candidates[0].first, candidates[0].second};
return answer;
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๋ฌธ์์ด ์์ถ | C++ (0) | 2023.06.30 |
---|---|
[Programmers] Lv2. ํ๋ ฌ ํ ๋๋ฆฌ ํ์ ํ๊ธฐ | C++ (0) | 2023.06.28 |
[Programmers] Lv2. ํฐ ์ ๋ง๋ค๊ธฐ | C++ (0) | 2023.06.27 |
[Programmers] Lv2. ํ๋ฐฐ์์ | C++ (0) | 2023.06.26 |
[Programmers] Lv2. ๊ฐ์ฅ ํฐ ์ | C++ (0) | 2023.06.26 |