[Programmers] Lv3. [์นด์นด์ค ์ธํด] ๋ณด์ ์ผํ | C++
2023. 10. 22. 12:12ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ปํ์ด ๊ณผ์
๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ์ ์ชฝ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์ 2๊ฐ๋ฅผ ๋๊ณ ๊ตฌ๊ฐ์ ์ค์ฌ๊ฐ๋ฉฐ ๊ตฌํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ด๊ฒ ํฌ ํฌ์ธํฐ(Two pointer) ์๊ณ ๋ฆฌ์ฆ์ด๋๊ตฐ์. ๋ชฐ๋์ง๋ง ์์ฐ์ค๋ฝ๊ฒ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค..?
ํ์ด ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- gems ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๋ณด์์ ์ข ๋ฅ ๊ฐ์๋ฅผ ์์๋ธ๋ค.
- ์์ ์ธ๋ฑ์ค(start)์ ๋ ์ธ๋ฑ์ค(end) ๋ณ์๋ฅผ ๊ฐ๊ฐ 0์ผ๋ก ๋๊ณ , ๋ณด์์ ์ข ๋ฅ ๊ฐ์๋ฅผ ๋ค ํฌํจํ๋ ๊ตฌ๊ฐ์ด ๋ ๋๊น์ง end๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ๋ณด์์ ์ข ๋ฅ๋ฅผ ๋ชจ๋ ํฌํจํ๋ ๊ฐ์ฅ ์์ ๊ตฌ๊ฐ๊น์ง ์์ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ๊ทธ ๊ณผ์ ์์ ๊ตฌ๊ฐ, start, end ๊ฐ์ ๊ฐฑ์ ์ํค๋ฉฐ, ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- end == gems.size()์ธ๋ฐ, start > end๊ฐ ๋๋ ๊ฒฝ์ฐ
- end == gems.size()์ธ๋ฐ, ๋ชจ๋ ์ข ๋ฅ ๊ฐ์๋ฅผ ํฌํจํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
โ๏ธ ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<string> gems) {
// 1. ๋ณด์ ์ข
๋ฅ ๋ฐ ๊ฐ์ ์ธ๊ธฐ
int N = gems.size();
map<string, int> counts;
for (const string& gem : gems)
counts[gem]++;
int gemKind = counts.size();
counts.clear();
// 2. ๋ชจ๋ ์ข
๋ฅ์ ๋ณด์์ ํฌํจํ๋ ๊ตฌ๊ฐ์ ์ฐพ์ผ๋ฉฐ ๊ฐฑ์ ํ๊ธฐ
int range = N;
int start = 0, end = 0;
vector<int> answer(2);
while (true)
{
if (counts.size() != gemKind and end < N)
{
counts[gems[end++]]++;
continue;
}
if (start > end or counts.size() != gemKind)
break;
counts[gems[start]]--;
if (counts[gems[start]] == 0)
counts.erase(gems[start]);
start++;
if (end - start < range)
{
range = end - start;
answer[0] = start;
answer[1] = end;
}
}
return answer;
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv3. ์ฌ ์ฐ๊ฒฐํ๊ธฐ | C++ (1) | 2023.10.22 |
---|---|
[Programmers] Lv3. ๊ฐ์ฅ ๋จผ ๋ ธ๋ | C++ (0) | 2023.10.22 |
[Programmers] Lv3. ์ด์ค์ฐ์ ์์ํ | C++ (0) | 2023.09.10 |
[Programmers] Lv2. ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ | C++ (0) | 2023.08.12 |
[Programmers] Lv2. ์นด์นด์คํ๋ ์ฆ ์ปฌ๋ฌ๋ง๋ถ | C++ (0) | 2023.07.13 |