https://school.programmers.co.kr/learn/courses/30/lessons/131127
map을 이용한 슬라이딩 윈도우 / 투 포인터 문제
map 탐색간 널포인터 처리만 유의하면 특별한건 없었다.
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int w = want.length;
int d = discount.length;
int answer = 0;
int SIZE = 10;
Map<String, Integer> window = new HashMap<>();
// window init
for(int i=0; i<SIZE; i++) {
window.merge(discount[i], 1, (ov,nv) -> ov + 1);
}
int st = 0;
int ed = SIZE;
for(int i=SIZE; i<=d; i++, st++, ed++) {
boolean possible = true;
for(int j=0; j<w; j++) {
if(window.getOrDefault(want[j], 0) < number[j]) {
possible = false;
break;
}
}
if(possible)
answer++;
if(ed == d)
break;
String stProduct = discount[st];
int stVal = window.get(stProduct);
String edProduct = discount[ed];
// st 포인터 상품은 window에 존재함이 보장
if(stVal == 1)
window.remove(stProduct);
else
window.put(stProduct, stVal - 1);
// ed 포인터 상품은 window에 존재함이 보장 x
window.merge(edProduct, 1, (ov,nv) -> ov + 1);
}
return answer;
}
}
'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글
[lv2] 시소 짝꿍 (0) | 2024.12.12 |
---|---|
[lv2] 호텔 대실 (0) | 2024.12.12 |
[lv2] k진수에서 소수 개수 구하기 (0) | 2024.12.12 |
[lv2] 마법의 엘리베이터 (0) | 2024.12.10 |
[lv2] 혼자서 하는 틱택토 (0) | 2024.12.10 |