Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프래그먼트
- 차이
- 서브스크립트
- 알고리즘
- async
- 풀이
- ios
- observable
- 클로저
- 옵셔널
- 리스트뷰
- 백준
- 스위프트
- 해시
- 테스크
- weak
- 안드로이드
- 이스케이핑
- rx
- Self
- 자바
- 연산자
- Subject
- Swift
- 구조체
- View
- RxSwift
- 생명주기
- 프로그래머스
- concurrency
Archives
- Today
- Total
study record
[프로그래머스-자바] 보석쇼핑 (2020카카오인턴십) 본문
보석쇼핑
- HashSet으로 보석의 개수를 구한다.
- gems[] 배열을 돌아가면서 큐에 넣으며, HashMap을 사용해 중복되는 보석의 개수들을 저장한다.
- 이때 큐.peek()과 HashMap.get()을 통해 큐의 첫번째 보석 개수가 1개를 초과하면 startPoint를 갱신해준다.
- hashMap의 사이즈와 HashSet의 크기가 같으면 모든 보석을 다 담은 것이므로 이때의 큐의 시작지점과 큐 사이즈를 통해 시작 진열대 번호와 끝 진열대 번호를 구해낸다.
연속된 것들을 처리해야하므로 Queue를 사용하고,
중복되지 않은 개수를 알기 위해 HashSet,
중복되는 것들을 알고 처리하기 위해 HashMap을 사용!
이해가 안되는 부분은 length를 마지막에 체크하는 부분이다. 그냥 break;하면 되는 거 아닐까..
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
public class gemShopping {
public static void main(String[] args) {
String[] gems = {"DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"};
System.out.println(solution(gems)[0] + " " + solution(gems)[1]);
}
public static int[] solution(String[] gems) {
Queue<String> q = new LinkedList<String>();
HashSet<String> hs = new HashSet<String>();
HashMap<String, Integer> hm = new HashMap<String, Integer>();
int startPoint = 0;
int length = Integer.MAX_VALUE;
int start = 0;
int[] answer = {};
for (String gem : gems) {
hs.add(gem);
}
for (String gem : gems) {
q.add(gem);
hm.put(gem, hm.getOrDefault(gem, 0) + 1);
while (true) {
String temp = q.peek();
if (hm.get(temp) > 1) {
q.poll();
hm.put(temp, hm.get(temp) - 1);
startPoint++;
} else {
break;
}
}
if (hm.size() == hs.size() && length > q.size()) {
length = q.size();
start = startPoint;
}
}
return new int[]{start + 1, start + length};
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스-자바] 해시 Hash (0) | 2021.05.03 |
---|---|
[프로그래머스-자바] DFS, BFS (0) | 2021.05.02 |
[프로그래머스-자바] 해시 - 완주하지못한 선수 (0) | 2021.04.24 |
[프로그래머스-자바] 키패드 누르기 (2020카카오인턴십) (0) | 2021.04.23 |
[알고리즘-자바] 삽입정렬 적용 문제 (0) | 2021.02.17 |