Map์ ์ด์ฉํด์ ๋ณด์ ์ข ๋ฅ๋ณ ๊ฐฏ์๋ฅผ ๊ธฐ๋กํ๋ค.
๊ทธ๋ฆฌ๊ณ L์ 0์ผ๋ก ์ก๊ณ , gems[L] ์ด Map์ ์กด์ฌํ๋ฉด์, ๊ฐ์ด 2์ด์์ผ๋ก ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ฐ์ด 1์ด ๋ ๋๊น์ง L์ ์ฆ๊ฐ์ํจ๋ค.
๊ทธ๋ฌ๋ฉด, ์ ์ผ ์์ชฝ์ ์ค๋ณต์ผ๋ก ์กด์ฌํ๋ ๋ณด์์ ์ ์ธ์ํฌ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ , Map์ size ์ฆ, ๊ธฐ๋ก๋ ๋ณด์์ ๊ฐฏ์๊ฐ ๋ณด์ ์ข ๋ฅ ์์ ์ผ์นํ๋ฉด ๋ชจ๋ ๋ณด์์ด ์กด์ฌํ๋ ๊ตฌ๊ฐ์์ ์๋ฏธํ๋ฏ๋ก
์ ๋ต์ ๊ฐฑ์ ํ๊ณ , ์ด๋ฏธ ๊ธฐ๋ก๋ ๊ธธ์ด๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ง ๊ฐฑ์ ํ๋ค.
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = new int[2];
int cnt = new HashSet<>(Arrays.asList(gems)).size();
int L = 0,length = Integer.MAX_VALUE;
HashMap<String,Integer> map = new HashMap<>();
for(int i=0 ; i<gems.length ; i++){
String gem = gems[i];
map.put(gem,map.getOrDefault(gem,0)+1);
while(map.get(gems[L])>1){
map.put(gems[L],map.get(gems[L])-1);
L++;
}
if(map.size()==cnt && length>i-L){
length = i-L;
answer[0]=L+1;
answer[1]=i+1;
}
}
return answer;
}
}