풀이 방법
투포인터 방법을 이용해서 풀이했다.
set으로 등장하는 보석의 갯수를 구해주고 포인터를 이동하면서 map을 이용해서 보석의 갯수를 세어준다.
start 포인터가 이동하면 map에서 갯수를 줄여주고 end 포인터가 이동하면 map에 갯수를 증가시켜주었다.
내 코드
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = {100000, 100000};
HashSet<String> set = new HashSet<>(Arrays.asList(gems));
HashMap<String, Integer> map = new HashMap<>();
int size = set.size();
int start = 0;
int end = 0;
int count = 100000;
while (true) {
if (map.size() == size) {
map.put(gems[start], map.get(gems[start]) - 1);
if (map.get(gems[start]) == 0)
map.remove(gems[start]);
start++;
} else if (end == gems.length) {
break;
} else {
map.put(gems[end], map.getOrDefault(gems[end], 0) + 1);
end++;
}
if (map.size() == size) {
if (end - start < count) {
answer[0] = start + 1;
answer[1] = end;
count = end - start;
}
}
}
return answer;
}
}
'코딩테스트 > [프로그래머스] 코딩테스트 연습' 카테고리의 다른 글
미로탈출 (0) | 2022.05.06 |
---|---|
경주로 건설 (0) | 2022.03.04 |
2 x n 타일링 (0) | 2021.12.29 |
124 나라의 숫자 (0) | 2021.12.28 |
구명보트 (0) | 2021.11.23 |