본문 바로가기

프로그래머스(Java)/Level 2

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

728x90

 

  • 반복문을 이용한 구간 설정: discount 배열에서 연속된 10개의 요소를 차례대로 검사합니다
  • 조건을 만족하는지 확인: 각 구간에서는 want 배열에 포함된 상품을 찾아서 number 배열의 해당 상품 재고를 감소시킵니다. 그리고 남은 재고가 모두 0 이하인지 확인합니다.
  • 조건을 만족할 때 결과를 증가: 남은 재고가 모두 0 이하인 경우에만 결과 값을 증가시킵니다.
  • 최종 결과 반환: 모든 구간에 대해 조건을 만족하는 횟수를 최종 결과로 반환합니다.

 


정답은 더보기 클릭

더보기
import java.util.Arrays;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        int result = 0;
        
        // 주어진 discount 배열에서 10개의 연속된 요소를 검사하기 위한 반복문
        for (int i = 0; i < discount.length - 9; i++) {
            boolean isMatch = true; // 현재 검사 중인 10개 요소가 조건을 만족하는지 여부
            
            // 남은 재고를 추적하기 위한 배열을 복사하여 초기화
            int[] remainingNumbers = Arrays.copyOf(number, number.length);
            
            // discount 배열에서 원하는 상품이 있는지 확인하고 재고 감소
            for (int j = i; j < i+10; j++) {
                
                // 해당 상품 index 찾기
                int idx = Arrays.asList(want).indexOf(discount[j]);
                
                // want 배열에 없는 상품이면 넘어감
                if (idx == -1) {
                    continue;
                } 
                
                // 해당 상품의 재고 감소
                remainingNumbers[idx]--;
            }
            
            // 남은 재고가 모두 0이면 조건을 만족하는 경우이므로 결과 값을 증가
            for (int k = 0; k < remainingNumbers.length; k++) {
                if (remainingNumbers[k] != 0) {
                    isMatch = false;
                    break;
                }
            }
            
            // 조건을 만족하는 경우 결과 값 증가
            if (isMatch) {
                result++;
            }
        }
        
        return result; // 최종 결과 반환
    }
}
728x90