코딩테스트/프로그래머스

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

GAEBAL 2022. 10. 17. 23:26
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

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

programmers.co.kr

 

 

풀이

Level2 문제

 

1. 자료구조를 잘 정해서 풀어야 할 것 같음
2. 로직을 반복할 때 다시 자료구조를 잘 초기화 시켜줘야 함

 

나같은 경우에는 Map을 사용해서 풀었음

그리고 .clone() 함수를 사용해서 초기화 시켜줬음

 

자세한건 주석으로 !

 

 

코드

// 코딩테스트 연습 - 연습문제 - 할인 행사
// https://school.programmers.co.kr/learn/courses/30/lessons/131127

package PROGRAMMERS.level2;

import java.util.HashMap;

public class Num131127_할인행사 {
    private static class Solution {
        private int solution(String[] want, int[] number, String[] discount) {
            HashMap<String, Integer> hashMap = new HashMap<>(); // 원하는 제품과 수량을 저장할 map
            HashMap<String, Integer> copiedMap; // 로직을 한번 실행한 후 다시 hashMap으로 초기화해서 사용할 map

            // hashMap에 값 초기화
            for (int i = 0 ; i< want.length ; i++) {
                String key = want[i];
                int value = number[i];
                hashMap.put(key, value);
            }

            // copiedMap에 hashMap을 복사해주기
            copiedMap = (HashMap)hashMap.clone();

            int sum = 0; // 원하는 제품들의 수량의 합
            for (int temp : number) {
                sum += temp;
            }

            int answer = 0; // 가능한 날의 수(정답)

            for (int i = 0; i <= discount.length - sum; i++) { // 필요한 만큼만 반복하기 위함
                for (int j = i; j < i + sum; j++) { // 현재 위치에서 +sum까지만 비교
                    String temp = discount[j];
                    if (!copiedMap.containsKey(temp)) { // 해당하는 키가 없으면
                        copiedMap = (HashMap) hashMap.clone();
                        break;
                    } else if (copiedMap.containsKey(temp) && copiedMap.get(temp) == 0) { // 해당 키가 있지만 값이 0이면
                        copiedMap = (HashMap) hashMap.clone();
                        break;
                    } else { // 해당 키가 있고 값이 0이 아니면
                        copiedMap.put(temp, copiedMap.get(temp) - 1); // 하나를 빼줌
                    }
                    if (j == i + sum - 1) { // 현재 반복문의 마지막 인덱스면
                        answer++;
                        copiedMap = (HashMap) hashMap.clone();
                    }
                }
            }

            return answer;
        }

        public static void main(String[] args) {
            Solution sol = new Solution();

            System.out.println(sol.solution(new String[]{"banana", "apple", "rice", "pork", "pot"}, new int[]{3, 2, 2, 2, 1}, new String[]{"chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"}));
            System.out.println(sol.solution(new String[]{"apple"}, new int[]{10}, new String[]{"banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"}));
        }
    }
}
728x90