https://school.programmers.co.kr/learn/courses/30/lessons/67258
๋ฌธ์
์ง์ด๋ ๋ฒํธ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
๋ณด์ ์ด๋ฆ | DIA | RUBY | RUBY | DIA | DIA | EMERAID | SAPPAIRE | DIA |
- ๋ชจ๋ ๋ฒ์์ ๋ณด์ 1๊ฐ์ด์ ํฌํจํ๋ ์งง์ ๊ตฌ๊ฐ(์์์ , ๋์ ) ๊ตฌํ๊ธฐ
- ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ์์ ์์ ๊ตฌ๊ฐ
์ ํ์ฌํญ
- ๋ฐฐ์ด ํฌ๊ธฐ : 1 ์ด์ 100,000 ์ดํ
ํ์ด
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ต๋ 10๋ง์ผ๋ก O(N^2)์ผ๋ก ํผ๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค. ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ก ํฌํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํผ๋ค๋ฉด O(N^2)๋ฏธ๋ง์ผ๋ก ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
- HashSet์ผ๋ก ์ง์ด๋์ ์๋ ๋ณด์์ ์ข ๋ฅ์ ์ ๊ตฌํ๊ธฐ
๋ชจ๋ ๋ณด์์ ํฌํจํ๋ ๊ตฌ๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก, ์ฐ์ ๋ณด์์ ์ข ๋ฅ๊ฐ ์ด ๋ช ๊ฐ์ง์ธ์ง ์์์ผ ํ๋ค. ๋ณด์ ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์ค๋ณต์ ์ ๊ฑฐํ๋ ์๋ฃ๊ตฌ์กฐ์ธ HashSet์ ๋ณด์์ ๋ด์ผ๋ฉด, ๋ณด์์ ์ข ๋ฅ ๊ฐ์๋ฅผ ์ ์ ์๋ค.
- HashMap์ ๋ณด์๋ณ ๊ฐ์ ์ ์ฅ
๋ชจ๋ ์ข ๋ฅ์ ๋ณด์์ด ์๋์ง ํ์ธํ๋ ค๋ฉด, ๊ตฌ๊ฐ ์์ ์ด๋ค ๋ณด์์ด ๋ช ๊ฐ์๋์ง ์์์ผ ํ๋ค. ๋ณด์๋ณ๋ก ๊ฐ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด HashMap<string, integer>์ ๋ณด์๊ณผ ๊ฐ์๋ฅผ ์ ์ฅํ๋ค.
- ํฌํฌ์ธํฐ
ํฌํฌ์ธํฐ๋ฅผ ํ ๋, ํฌ์ธํฐ๋ฅผ ๋ชจ๋ ์์์ ์ ๋๊ณ ์์ํ๊ฑฐ๋, ํฌ์ธํฐ๋ฅผ ์ ๋์ ๋๊ณ ์์ํ ์ ์๋ค. ์ ํด์ง ์ฐ์๋ ๋ฒ์๋ฅผ ํ์ํด์ผ ํ๋ฏ๋ก, ํฌ์ธํฐ๋ฅผ ๋ชจ๋ ์์์ ์ ๋๊ณ ํ์์ ์์ํ๋ฉด ๋๋ค.
1. right ํฌ์ธํฐ๋ฅผ ํ๋์ฉ ๋๋ ค๊ฐ๋ฉฐ ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ right์ ํด๋นํ๋ ๋ณด์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
2. left์ ํด๋นํ๋ ๋ณด์์ด 1๊ฐ๋ฅผ ์ด๊ณผํ ๋๊น์ง, ํด๋น ์ข ๋ฅ์ ๋ณด์์ ๊ฐ์๋ฅผ ์ฐจ๊ฐ์ํค๊ณ , left ํฌ์ธํฐ๋ก ์ฆ๊ฐ์ํจ๋ค.
3. left ํฌ์ธํฐ ์กฐ์์ด ๋๋๊ณ , map์ ์ฌ์ด์ฆ(ํ์ฌ ๊ตฌ๊ฐ ์ ๋ณด์ ์ข ๋ฅ ์)๊ฐ set์ ์ฌ์ด์ฆ(๋ณด์์ ์ข ๋ฅ ์)์ ๊ฐ๊ณ , ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ์ด๋ฉด, ๊ฐ์ ๊ฐฑ์ ํ๋ค.
์ฝ๋
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
HashSet<String> set = new HashSet<>(); //๋ณด์์ ์ข
๋ฅ
for(String gem : gems) {
set.add(gem);
}
int left = 0;
int target = set.size(); //๋ชจ๋ ๋ณด์ ๊ฐ์
int min = 100000; //๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ
int[] answer = new int[2]; //์์๋ฒํธ, ๋๋ฒํธ
HashMap<String, Integer> map = new HashMap<>(); //๋ณด์, ๊ฐ์
for(int right = 0; right < gems.length; right++) { //right ํฌ์ธํฐ ๋๊น์ง ํ์
map.put(gems[right], map.getOrDefault(gems[right], 0) + 1); //right ํด๋น ๋ณด์ ๊ฐ์ ์ฆ๊ฐ
while(map.getOrDefault(gems[left], 0) > 1) { //left ํด๋น ๋ณด์์ด 1๊ฐ ์ด๊ณผํ ๋๊น์ง ํฌ์ธํฐ ์ฆ๊ฐ
map.put(gems[left], map.get(gems[left]) - 1); //ํด๋น ๋ณด์ ๊ฐ์ ๊ฐ์
left++;
}
if (map.size() == target && right - left < min) { //๋ชจ๋ ๋ณด์ ํฌํจ & ๊ฐ์ฅ ์งง์ ๊ตฌ๊ฐ ๋ฐ๊ฒฌ
min = right - left;
answer[0] = left + 1;
answer[1] = right + 1;
}
}
return answer;
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - ๊ทค ๊ณ ๋ฅด๊ธฐ (0) | 2023.11.10 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ์กฐ์ด์คํฑ (0) | 2023.10.24 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ ํ ํฉ ๊ฐ๊ฒ ๋ง๋ค๊ธฐ (0) | 2023.10.19 |
ํ๋ก๊ทธ๋๋จธ์ค - ๊ฐ์ฅ ํฐ ์ (0) | 2023.09.07 |
ํ๋ก๊ทธ๋๋จธ์ค - ์ด์ง ๋ณํ ๋ฐ๋ณตํ๊ธฐ (0) | 2023.08.30 |