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
- 백준 18222
- 스프링 에러
- leetcode
- 스택
- 프로그래머스
- Java
- 리트코드
- 코딩테스트
- 파이썬
- 자바 리트코드
- 리트코드 1557
- 카카오
- 인텔리제이 에러
- 자바 5464
- 백준
- 분할정복
- 코테
- 구현
- 프로그래머스 java
- java leetcode
- dfs
- java 프로그래머스
- 자바
- 그래프 자바
- BFS
- daily challenge
- DP
- leetcode 1721
- 백준 16935
- 리트코드 자바
Archives
- Today
- Total
레벨업 일지
[Java] 프로그래머스 2020 카카오 인턴_ 보석 쇼핑 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/67258
풀이
풀이 원리는 투포인터를 이용한 윈도우 슬라이더를 유지하면서 풀었다.
리트코드에서 풀었던 최대 빈도수와 원리는 같다.
알고리즘은 다음과 같다.
- set을 사용하여 보석 종류의 개수를 센다.
- gem 배열을 탐색하면서, 해시맵으로 보석 종류별 개수를 매핑한다.
- 보석 종류가 보석 최대 개수 k개에 다다랐을떄, left 포인터를 무빙하면서 답을 갱신한다.
- right가 끝에 다다르면 반복문을 종료한다.
참고
해시맵에서 key 가 없을때, java.util.HashMap.merge 메소드를 사용하여 (key, value)를 삽입하였는데,
map.put(map.getOrDefault(key,0)+1);
getOrDefault 랑 비교해보니 getOrDefault 가 수행시간이 두배더 빠른것을 확인할 수 있었다.
코드
import java.util.*;
class Solution {
public int[] solution(String[] gems) {
int[] answer = new int[] {};
HashSet<String> gemCnt = new HashSet<>(Arrays.asList(gems));//보석 종류의 개수
HashMap<String, Integer> map = new HashMap<>();
int left =0 ;
int right = 0;
int min = Integer.MAX_VALUE;
while(right < gems.length){
map.merge(gems[right], 1, Integer::sum);
int size = map.size();
while(size == gemCnt.size()){
if(min >right - left +1 ){
answer = new int[]{left+1,right+1};
min = right - left + 1;
}
map.merge(gems[left],-1,Integer::sum);
if(map.get(gems[left])==0){
map.remove(gems[left]);
size--;
}
left++;
}
right++;
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 단속카메라 (0) | 2023.01.24 |
---|---|
[Java] 프로그래머스 등굣길 (1) | 2023.01.23 |
[Java] 프로그래머스. 체육복 (0) | 2023.01.22 |
[Java] 프로그래머스 큰 수 만들기 (0) | 2023.01.20 |
[java] 프로그래머스-무지의 먹방 라이브 (0) | 2023.01.06 |
Comments