자바/코딩테스트

[프로그래머스] 할인 행사 - Java(자바)

대전집주인 2024. 3. 26. 10:09
728x90
SMALL

 

문제 이해

  • 할인하는 제품이 1 ~ n 일까지 들어있는 discount가 존재한다. 제품은 하루에 한개씩만 할인해준다.
  • 정현이는 원하는 제품 want와 원하는 제품의 개수가 담긴 number가 존재한다.
  • 해당 제품을 모두 할인 받을 수 있는 날이 n ~ N 까지 몇번 되는지 구하여라
  • 원하는 제품과 개수를 담아서 비교 할수 있게 map을 만들어서 들고 다녔다.
  • 제품의 개수는 10개 고정임으로 discount-10 길이 만큼 index 를 하나씩 올리며 전체 할인이 되는지 구하였다.
  • temp라는 임시 map에 discount[i ~ i+10] 의 제품이 몇번씩 나오는지 넣는다.
  • temp == map 이 똑같다면 원하는 제품을 전부 살수 있다는 뜻으로 하였다.
import java.util.*;
class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        for(int i = 0; i<want.length; i++){
            map.put(want[i], number[i]);
        }
        
        for(int i = 0; i<=discount.length-10; i++){
            Map<String, Integer> temp = new HashMap<String, Integer>();
            for(int j = i; j<i+10; j++){
                if(temp.containsKey(discount[j])){
                    temp.put(discount[j], temp.get(discount[j]) + 1);
                }else{
                    temp.put(discount[j], 1);
                }
            }
            
            int cnt = 0;
            for ( String key : map.keySet() ) {
                if(temp.containsKey(key)){
                    if(temp.get(key) == map.get(key)){
                        cnt++;
                    }
                }else{
                    break;
                }
            }
            if(cnt == map.size()){
                answer += 1;
            }
        }
        
        return answer;
    }
}
728x90
LIST