[Java] 보석 쇼핑 - Lv3 프로그래머스 2020 카카오 인턴십코딩테스트/프로그래머스2023. 3. 9. 18:15
Table of Contents
728x90
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/67258
풀이
Map : 보석의 종류별 갯수 (중복 값은 getOrDefault로 +1)
Set : 보석 종류 파악
cnt, start, end : 범위에 사용할 변수
map.size = set.size의 경우 : map에 모든 보석 종류가 존재할 경우 >> 해당 거리의 시작, 끝위치 파악
시작위치와 끝위치를 담은 answer[]를 반환하면 끝
class Solution {
public int[] solution(String[] gems) {
Set<String> set = new HashSet<>();
Map<String, Integer> map = new HashMap<>();
Queue<String> q = new LinkedList<>();
for(String str : gems) {
set.add(str);
}
int cnt=0;
int start=0;
int end= gems.length;
for(String str : gems) {
q.offer(str);
map.put(str, map.getOrDefault(str, 0)+1);
while(true) {
String peek = q.peek();
if(map.get(peek)>1) {
q.poll();
map.put(peek, map.getOrDefault(peek, 0)-1);
cnt++;
}
else {
break;
}
}
if(map.size()==set.size()) {
if(end>q.size()) {
end=q.size();
start=cnt;
}
}
}
int[] answer = {start+1, start+end};
return answer;
}
}
굳이 큐를 쓰지 않았어도 됐을 것 같다.
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!