티스토리 뷰

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
    
        int answer = 0;
        HashMap<String,Integer> wa = new HashMap<>();
      
        for(int j=0; j<want.length; j++){
            wa.put(want[j], number[j]);
        }

        for(int i=0; i<discount.length-9; i++){
            if(check(i, discount, wa)){
                answer++;
            }
        }
        return answer;
    }
    
    public boolean check(int start, String[] discount, HashMap<String, Integer> wa){
        int left = start;
        int right = start+9;
        HashMap<String,Integer> di = new HashMap<>();
        
        for(int i=left; i<=right; i++){
            di.put(discount[i], di.getOrDefault(discount[i], 0)+1);
        }

        for(String s : wa.keySet()){
            if(!di.containsKey(s) || wa.get(s) != di.get(s)){
                return false;
            }
        }
        return true;
    }
}

 

HashMap을 활용하여 wa에 원하는 제품과 해당하는 개수를 저장하였다.

check함수는 원하는 제품을 저장해둔  HashMap (wa) 를 반복문을 돌면서

start로 부터 총 10일간의 할인 품목을 저장한 HashMap (di) 에 포함되지 않거나

그 해당 품목의 개수가 다르다면 false를 리턴하고 그게 아니면 true를 리턴하는 함수이다.

 

체크함수를 통한 반환값이 true이면 answer를 1씩 증가시켜 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 구한다.

 

처음 알고리즘을 구현할 때 원하는 제품을 모두 할인 받을 수 있는 가장 빠른 날로 구하여 구해 많은 시간을 할애하였다.

 

앞으론 문제를 꼼꼼히 읽자!

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함