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

조예빈·2024년 7월 23일
0

Coding Test

목록 보기
67/138

https://school.programmers.co.kr/learn/courses/30/lessons/131127
문제를 잘 읽어야 한다.... 처음에 회원가입 한 날이 며칠째인지를 구해서 자꾸 틀렸다. 이렇게 풀어도 테스트 코드는 맞게 나오는데, 정답만 맞지 않게 나와서 틀린 부분을 찾는 데 시간이 많이 소요됐다ㅠㅠ

문제는 해시맵 두 개를 이용하여 풀었다. 시작일로부터 10일 전 까지의 모든 경우를 구해 새로운 해시맵에 저장한 후, 원래의 해시맵과 일치하면 정답 일수를 1 늘려주는 식으로 구현하였다.

이 때, 해시맵의 비교는 간단히 equals를 사용하면 된다.

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        //want : 원하는 제품
        //number : 제품 수량
        //discount : 할인 제품
        HashMap<String, Integer> map = new HashMap<>(); //원하는 제품과 수량을 담은 해시맵

        int answer = 0;
        int w = number.length;
        int buyDays = 0;
        
        for(int i=0; i<w; i++){ //원하는 제품과 수량을 담는 반복문
            map.put(want[i], number[i]);
            buyDays = buyDays + number[i];
        }
        
        //10일간을 비교했을 때 map에 들어있는 상품의 개수와 같으면 그 시작일이 정답
        //세일은 10일동안 함
        int d = discount.length;
        for(int i=0; i<=d-10; i++){ //시작일. 범위를 초과하지 않도록 10을 빼 주어야 함
            HashMap<String, Integer> buyMap = new HashMap<>();
            for(int j=i; j<i+10; j++){ //시작일로부터 10일간 탐색
                if(buyMap.containsKey(discount[j])){ //이미 종목이 있으면
                    buyMap.put(discount[j], buyMap.get(discount[j])+1); //개수 1 증가
                }else{ //종목이 없으면
                    buyMap.put(discount[j], 1);
                }
            }
            //종목을 하나씩 나눈 후에 처음 값과 같으면
            if(buyMap.equals(map)){
                answer++;
            }
        }
        return answer;
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글