원하는 것은 뭐든지

99클럽 코테 스터디 27일차 TIL , 할인 행사 본문

개발/문제풀이

99클럽 코테 스터디 27일차 TIL , 할인 행사

댕로그😏 2024. 8. 17. 12:17
반응형

문제

풀이

원하는 물건을 모두 할인가격에 사기 위해서 언제 가입을 해야 하는지 찾는 문제였다.

원하는 물건과 개수 그리고 할인품목들이 입력으로 주어지는데 할인품목은 당일에 하나씩만 구매할 수 있다. 

또 할인 물품을 사려면 회원가입을 해야 하는데 10일 동안만 유지되었다. 해서 10일을 최대한 활용해서 원하는 물건을 구매할 수 있는 날이 며칠인지를 구하면 된다.

제출 1 - 정답

import java.util.*;
class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        Map<String, Integer> map = new HashMap<>();
        Map<String, Integer> checkMap = new HashMap<>();
        int total = 0;
        for(int i=0;i<want.length;i++){
            map.put(want[i], number[i]);
            total += number[i];
        }
        int lt = 0;
        int rt = 0;
        while(rt < discount.length){
            if(rt - lt == total){
                if(check(map, checkMap)) answer++;

                checkMap.put(discount[lt], checkMap.get(discount[lt]) - 1);
                lt++;
            }else{
                checkMap.put(discount[rt], checkMap.getOrDefault(discount[rt],0) + 1);
                rt++;
            }
        }

        if(check(map, checkMap)) answer++;

        return answer;
    }
    private static boolean check(Map<String, Integer> map,
                                 Map<String, Integer> checkMap){
        for(String key : map.keySet()){
            if(map.get(key) != checkMap.get(key)){
                return false;
            }
        }
        return true;
    }
}

 

원하는 물건과 개수를 Map에 담아주고 check를 위한 Map도 생성해준다.

그 후 lt와 rt를 만들어 앞으로 전진하면서 같아질 경우를 정답에 추가해 준다.

TIL

  • 조건 인지
반응형
Comments