본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 할인행사 (JAVA)

by LeeGangEun 2023. 7. 5.

https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

Map의 자료구조를 사용하여 쉽게 풀 수 있는 문제이다.

1. Map에 필요한 물건을 key, 개수를 value로 생성해준다.
2. discount의 9일전까지 반복을 해준다 (그 이상은 마트에 등록을해도 10일이 안채워지기 때문)
3. 현재 마트에서 할인하는 물품이 wantCount에 없는 물품이라면 다음날로 이동 (결국 모든 물품을 사지 못하기때문에)
4. 위까지 통과하였다면 map에서 모든 물품을 구매하였으면 (모든 value값이 0이라면)  result 증가

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {

        int result = 0;

        Map<String, Integer> wantCount = new HashMap<>();

        first:
        for (int i = 0; i < discount.length - 9; i++) {

            for (int k = 0; k < want.length; k++) wantCount.put(want[k], number[k]);

            for (int j = i; j < i + 10; j++) {
                if (!wantCount.containsKey(discount[j])) continue first;
                wantCount.put(discount[j], wantCount.get(discount[j]) - 1);
            }

            boolean check = wantCount.values().stream().anyMatch(num -> num > 0);
            if(!check) result++;

        }

        return result;
    }
}