풀이
- 보석의 종류는 Set으로 관리
- 현재 포함하는 보석의 종류는 Map으로 관리
- set의 크기와 map의 크기가 같으면 start를 1 늘림
- map에서 gems[start]을 제외
- map의 크기가 작으면 end를 1 늘림
- map에 gems[end] 추가
비고
- 2중 for문으로 돌렸다가 효율성에서 다 터짐 ㅠㅠ
- 투포인터 문제!
더보기
package KakaoIntern2020.P67258_보석쇼핑;
import java.util.HashMap;
import java.util.HashSet;
public class Solution {
static public int[] solution(String[] gems) {
int[] answer = new int[2];
HashSet<String> set = new HashSet<>();
for (int i = 0; i < gems.length; i++) {
set.add(gems[i]);
}
int min = Integer.MAX_VALUE;
int start = 0;
int end = 0;
HashMap<String, Integer> map = new HashMap<>();
while (start < gems.length) {
if (set.size() == map.size()) {
if (min > end - start) {
min = end - start;
answer = new int[] { start + 1, end };
}
remove(map, gems[start++]);
} else {
if (end >= gems.length)
break;
add(map, gems[end++]);
}
}
return answer;
}
private static void add(HashMap<String, Integer> map, String gem) {
if (map.containsKey(gem)) {
map.replace(gem, map.get(gem) + 1);
} else {
map.put(gem, 1);
}
}
private static void remove(HashMap<String, Integer> map, String gem) {
if (map.get(gem) == 1) {
map.remove(gem);
} else {
map.replace(gem, map.get(gem) - 1);
}
}
public static void main(String[] args) {
String[] g = { "ZZZ", "YYY", "NNNN", "YYY", "BBB" };
int[] r = solution(g);
System.out.println(r[0] + " " + r[1]);
}
}
'알고리즘왕 > Programmers' 카테고리의 다른 글
[프로그래머스/JAVA] 호텔방배정 (0) | 2021.05.04 |
---|---|
[프로그래머스/JAVA] 튜플 (0) | 2021.05.04 |
[프로그래머스/JAVA] 수식 최대화 (0) | 2021.05.04 |
[프로그래머스/JAVA] 키패드 누르기 (0) | 2021.05.04 |
[프로그래머스/JAVA] 불량 사용자 (0) | 2021.05.04 |