[프로그래머스] 절대 외부 IDE를 써선 안돼/Java

[lv2] 할인 행사

SH3542 2024. 12. 12. 16:56

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;
    }
}