코딩 테스트

(Java) 프로그래머스 - 할인 행사

로승리 2022. 10. 7. 19:58

새롭게 나온 레벨 2 문제인데 입력값이 크지도 않고 로직이 복잡한 것도 아니라서 어렵지 않다.

어느 기업인지는 기억이 안나지만 코딩 테스트에서 비슷한 문제를 풀었던 기억이 있다.


로직

i일부터 10일동안 할인 품목을 map에 넣는다. 그리고 각 품목을 비교하는데 하나라도 number보다 작으면 안 되므로 작은 값이 나오면 탐색을 중단한다. 또한 map에 want 품목이 하나라도 없으면 안 되므로 마찬가지로 탐색을 중단한다.

모든 조건이 맞으면 answer 값을 증가시킨다.

 

최종 코드

import java.util.*;
class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        
        // i부터 10일간 할인 품목 map에 넣기
        for(int i = 0; i < discount.length; i++) {
            Map<String, Integer> dis = new HashMap<>();
            int cnt = 0;
            for(int j = i; j < discount.length; j++) {
                // 10일이 지나면 중단
                if(cnt == 10) {
                    break;
                }
                dis.put(discount[j], dis.getOrDefault(discount[j], 0) + 1);
                cnt++;
            }
            
            // number와 map의 값을 비교 
            boolean flag = false;
            for(int j = 0; j < want.length; j++) {
                // map에 want 물품이 없으면 탐색 종료
            if(dis.get(want[j]) == null) {
                flag = true;
                break;
                }
                // map의 값보다 want 값이 크면
            if(number[j] > dis.get(want[j])) {
                    flag = true;
                    break;
                }
            }
        
            if(!flag) {
                answer++;
            }
            
        }
        return answer;
    }
}