Algorithms/프로그래머스

[프로그래머스][Lv2] 할인행사

hyunki.Dev 2023. 4. 1. 22:17

📌 문제

[할인행사 - 프로그래머스 lv2] 

 

프로그래머스

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

programmers.co.kr

 

📌 풀이

  • 고객이 원하는 장바구니에 대한 map을 생성합니다.
  • 할인점에서 만들 수 있는 장바구니(10일치)를 생성합니다.
  • ✔️number 원소의 합은 10이므로 10일치에 대한 장바구니를 생성합니다.
  • 이 둘을 비교하여 일치한다면 (장바구니를 구성하고 있는 과일과 그 개수) answer 의 값을 증가시켜 줍니다.

 

📌 코드

import java.util.*;
class Solution { 
    private static int answer = 0;
    public int solution(String[] want, int[] number, String[] discount) {       
        Map<String,Integer> map = new HashMap<>();
        
        //System.out.println(number.length);
        for(int i = 0; i < want.length; i++){ //원하는 장바구니 Map
            map.put(want[i],number[i]);
        }
                
        //discount의 길이는 무조건 10 이상이다.
        for(int i = 0; i <= discount.length-10; i++){ //길이가 10만큼 장바구니 만듬
            check(map , cart(i,discount)); //원하는 장바구니 map 과 만들어진 장바구니 비교
        }
        
        return answer;
    }
    
    // 10일간 만들어질 수 있는 장바구니 Map
    private static Map<String,Integer> cart(int index,String[] discount){
        Map<String,Integer> map = new HashMap<>();
        for(int i = index; i < index+10; i++){
            map.put(discount[i],map.getOrDefault(discount[i],0)+1);
        }
        
        //System.out.println(map);
        return map;
    }
    
    // 원하는 장바구니와 10일간 담을수 있는 장바구니를 비교하는 메서드
    private static void check(Map<String,Integer> want, Map<String,Integer> cart){
        
        //map 비교는 equals 로 하면 된다.
        if(!want.equals(cart)){
            return;
        }
        answer++;
    }
}