본문 바로가기
반응형
Algorithm

[프로그래머스 Java] 할인 행사 Lv.2

by brightGarden02 2023. 9. 19.

* 순서

- 문제

- 문제 설명

- 문제 목표

- 문제 풀이

- 최종 코드

- 포인트

- 다른 사람 코드

 

 

- 문제

 

 

- 문제 설명

원하는 제품, 원하는 제품의 개수가 있다. 마트에서 매일 한 제품을 할인하는데 하나씩만 구매할 수 있다.

10일 연속으로 할인 제품을 구매할 수 있는 날짜의 수를 구한다.

제품을 구매할 수 없으면 0을 return한다.

 

 

- 문제 목표

10일 연속으로 할인 제품을 구매할 수 있는 날짜의 수를 구한다.

 

 

- 문제 풀이

1. 원하는 제품과 원하는 제품의 수를 wMap에 저장한다.

2. 연속해서 할인 제품 구매할 수 있는 날짜를 세야하니 길이를 다음과 같이 정해서 for문을 돌린다.

3. 할인하는 제품과 개수를 dMap에 저장한다.

4. 할인하는 제품의 개수와 원하는 제품의 개수를 비교한다.

5. 개수가 일치하면 answer를 1씩 증가한다.

 

 

- 최종 코드

public static int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;

        Map<String, Integer> wMap = new HashMap<>();

        //1. 원하는 제품과 원하는 제품의 수를 wMap에 저장한다.
        for(int i = 0; i < want.length; i++) {
            wMap.put(want[i], number[i]);
        }

        int consecutiveDays = 10;

        //2. 연속해서 할인 제품 구매할 수 있는 날짜를 세야하니 길이를 다음과 같이 정해서 for문을 돌린다.
        for (int i = 0; i < discount.length - consecutiveDays + 1; i++) {
            Map<String, Integer> dMap = new HashMap<>();
            
            //3. 할인하는 제품과 개수를 dMap에 저장한다.
            for (int j = 0; j < consecutiveDays; j++) {
                dMap.put(discount[i + j], dMap.getOrDefault(discount[i + j], 0) + 1);
            }

            Boolean wantNumberExist = true;

            //4. 할인하는 제품의 개수와 원하는 제품의 개수를 비교한다. 
            for(String key : wMap.keySet()) {
                if(wMap.get(key) != dMap.get(key)) {
                    wantNumberExist = false;
                    break;
                }
            }

            //5. 개수가 일치하면 answer를 1씩 증가한다.
            if(wantNumberExist) {
                answer++;
            }
        }

        return answer;
    }

 

 

- 포인트

맵 2개 사용한다

for문 사용시 인덱스 값을 i+j를 이용함으로 원하는 인덱스부터 문제에서 원하는 인덱스까지 구할 수 있게 한다.

 

 

- 다른 사람 코드

3중 for문을 돌려서 구했다.

List를 사용했다.

댓글


반응형
반응형