https://school.programmers.co.kr/learn/courses/30/lessons/67258#
๋ฌธ์ ์ค๋ช
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
๊ฐ๋ฐ์ ์ถ์ ์ผ๋ก ์ธ๊ณ ์ต๊ณ ์ ๊ฐ๋ถ๊ฐ ๋ ์ดํผ์น๋ ์คํธ๋ ์ค๋ฅผ ๋ฐ์ ๋๋ฉด ์ด๋ฅผ ํ๊ธฐ ์ํด ์คํ๋ผ์ธ ๋งค์ฅ์ ์ผํ์ ํ๋ฌ ๊ฐ๊ณค ํฉ๋๋ค.
์ดํผ์น๋ ์ผํ์ ํ ๋๋ฉด ๋งค์ฅ ์ง์ด๋์ ํน์ ๋ฒ์์ ๋ฌผ๊ฑด๋ค์ ๋ชจ๋ ์น์ธ์ด ๊ตฌ๋งคํ๋ ์ต๊ด์ด ์์ต๋๋ค.
์ด๋ ๋ ์คํธ๋ ์ค๋ฅผ ํ๊ธฐ ์ํด ๋ณด์ ๋งค์ฅ์ ์ผํ์ ํ๋ฌ ๊ฐ ์ดํผ์น๋ ์ด์ ์ฒ๋ผ ์ง์ด๋์ ํน์ ๋ฒ์์ ๋ณด์์ ๋ชจ๋ ๊ตฌ๋งคํ๋ ํน๋ณํ ์๋ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ณ ์ถ์์ต๋๋ค.
์ง์ด๋ ๋ชจ๋ ์ข ๋ฅ์ ๋ณด์์ ์ ์ด๋ 1๊ฐ ์ด์ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ์ฐพ์์ ๊ตฌ๋งค
์๋ฅผ ๋ค์ด ์๋ ์ง์ด๋๋ 4์ข ๋ฅ์ ๋ณด์(RUBY, DIA, EMERALD, SAPPHIRE) 8๊ฐ๊ฐ ์ง์ด๋ ์์์ ๋๋ค.
์ง์ด๋ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
๋ณด์ ์ด๋ฆ | DIA | RUBY | RUBY | DIA | DIA | EMERALD | SAPPHIRE | DIA |
์ง์ด๋์ 3๋ฒ๋ถํฐ 7๋ฒ๊น์ง 5๊ฐ์ ๋ณด์์ ๊ตฌ๋งคํ๋ฉด ๋ชจ๋ ์ข ๋ฅ์ ๋ณด์์ ์ ์ด๋ ํ๋ ์ด์์ฉ ํฌํจํ๊ฒ ๋ฉ๋๋ค.
์ง์ด๋์ 3, 4, 6, 7๋ฒ์ ๋ณด์๋ง ๊ตฌ๋งคํ๋ ๊ฒ์ ์ค๊ฐ์ ํน์ ๊ตฌ๊ฐ(5๋ฒ)์ด ๋น ์ง๊ฒ ๋๋ฏ๋ก ์ดํผ์น์ ์ผํ ์ต๊ด์ ๋ง์ง ์์ต๋๋ค.
์ง์ด๋ ๋ฒํธ ์์๋๋ก ๋ณด์๋ค์ ์ด๋ฆ์ด ์ ์ฅ๋ ๋ฐฐ์ด gems๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ๋ณด์์ ํ๋ ์ด์ ํฌํจํ๋ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ์ฐพ์์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ์์ ์ง์ด๋ ๋ฒํธ์ ๋ ์ง์ด๋ ๋ฒํธ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์์ return ํ๋๋ก ํ๋ฉฐ, ๋ง์ฝ ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์์ ์ง์ด๋ ๋ฒํธ๊ฐ ๊ฐ์ฅ ์์ ๊ตฌ๊ฐ์ return ํฉ๋๋ค.
๋ด ํ์ด
ํฌ ํฌ์ธํฐ๋ก ํ ์ ์๋ ๋ฌธ์ ๋ค. ์์ธํ ์๋ฆฌ๋ ๋ค์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
https://hwan-shell.tistory.com/263
#include <string>
#include <vector>
#include <unordered_map>
#include <set>
#include <iostream>
using namespace std;
vector<int> solution(vector<string> gems) {
vector<int> answer(2, -1);
set<string> s;
int minLength = 999'999;
// ๋ช ์ข
๋ฅ๊ฐ ์๋์ง ํ์ธํ๊ธฐ
for (auto g : gems)
s.insert(g);
int start = 0, end = 0;
unordered_map<string, int> gm;
while(true)
{
// end๋ฅผ ๋ชจ๋ ์ข
๋ฅ์ ๋ณด์์ ํฌํจํ ์ ์๋ ์์น๋ก ์ด๋์ํจ๋ค. (0๋ถํฐ)
int i = end;
for(; i < gems.size(); ++i)
{
++gm[gems[i]];
if(gm.size() == s.size())
{
end = i;
break;
}
}
// end๊ฐ ๋๊น์ง ๊ฐ๋ค๋ฉด ๋ชจ๋ ์ข
๋ฅ๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ๊ฐ ๋์ด์ ์๋ค๋ ๊ฒ์ด๋ฏ๋ก ํ์ ์ข
๋ฃํ๋ค
if(i == gems.size())
break;
// start๋ฅผ ์ฎ๊ธฐ๋ฉฐ ๋ชจ๋ ์ข
๋ฅ์ ๋ณด์์ด ํฌํจ๋์ด์๋์ง ํ์ธ
for(int i = start; i <= end; ++i)
{
if(gm[gems[i]] == 1)
{
start = i;
break;
}
else
--gm[gems[i]];
}
// ๊ธธ์ด์ ๋ฐ๋ผ ์ ๋ต ๊ฐฑ์ ํ๊ธฐ
if(end-start < minLength)
{
minLength = end - start;
answer[0] = start+1;
answer[1] = end+1;
//cout << start << ", " << end << endl;
}
// ๊ฒ์ ์์ ์ง์ ์ ํ๋์ฉ ๋๊ธด๋ค.
gm.erase(gems[start]); // ์ฒซ๋ฒ์งธ ์ข
๋ฅ์ ๋ณด์์ ๋บ๋ค (end๋ฅผ ํ๋ ๋๊ฒผ์๋ ์ด ์ข
๋ฅ์ ๋ณด์์ ํฌํจํด์ผํ๋ค.)
++start;
++end;
}
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์ซ์ ๋ณํํ๊ธฐ (C++) (0) | 2023.09.22 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ๋ฐฉ๋ฌธ ๊ธธ์ด (C++) (0) | 2023.09.21 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ (C++) (1) | 2023.09.18 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ์๊ณผ ๋๋ (C++) (0) | 2023.09.14 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ๋ฏธ๋ก ํ์ถ ๋ช ๋ น์ด (C++) (0) | 2023.09.07 |