본문 바로가기
코딩테스트/programming_JAVA

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

by prometedor 2024. 1. 8.

할인행사 : Level2

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

 

프로그래머스

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

programmers.co.kr

 

 

 

풀이

class Solution {
       static public int solution(String[] want, int[] number, String[] discount) {
        int answer = 0;
        for (int i = 0; i < discount.length - 9; i++) {
            int idx = 0;
            for (int j = idx; j < want.length; j++) {
                int num = number[j];
                for (int k = i; k < i + 10; k++) {
                    if (discount[k].equals(want[j])) num--;
                }
                if (num > 0) {
                     break;
                }
                idx++; // 다음 상품을 위해 idx 증가
            }
            if (idx == want.length) answer++;
        }
        return answer;
    }
}

 

 

ㄴ discount 배열을 순회하며, 할인 쿠폰을 10개씩 묶어서 확인한다. (for (int i = 0; i < discount.length - 9; i++))

     => discount = ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] 배열을 10개씩 묶을 경우

  • ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice"]
  • ["apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot"]
  • ["apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana"]
  • ["banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple"]
  • ["rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"]

=> 이렇게 5개의 묶음이 나오므로 5번 반복하도록 해야 한다.

=> 그러므로 discount.length - 9 (10개씩 묶기 때문) 만큼 반복하도록 해야한다.

 

ㄴ want 배열을 순회하면서 각 상품에 대해 할인 쿠폰을 사용하면 수량이 충분한지 확인한다.

  • num 변수는 해당 상품의 수량을 나타낸다.
  • for (int k = i; k < i + 10; k++)는 현재 고려 중인 할인 쿠폰의 범위를 나타낸다. 10개의 쿠폰을 순차적으로 확인한다.
  • if (discount[k].equals(want[j])) num--;은 현재 상품에 대해 할인 쿠폰을 사용하는 경우 해당 상품의 수량을 1 감소킨다.
  • 만약 할인 쿠폰을 모두 사용해도 상품을 아직 구매해야된다면, 반복문을 종료하고 다음 상품을 확인하도록 한다.

ㄴ 상품 수량이 0보다 큰 경우, 해당 상품을 구매할 수 없으므로 반복문을 중단하고 다음 상품을 확인한다.

ㄴ 모든 상품에 대해 할인 쿠폰을 사용하여 구매할 수 있다면 (idx가 상품 리스트의 길이와 같다면), answer를 증가시키도록 했다.