프로그래머스 lv2 할인 행사

namkun·2023년 2월 1일
0

코딩테스트

목록 보기
66/79

문제 링크

할인 행사

풀이

  • 배열을 하나하나 탐색하면서 이번엔 조건에 부합하는가? 를 묻는 문제다.
  • 이런 경우 sliding window를 생각하고 풀면 된다.
  • 특정 컬렉션에서 개수를 세야할 때는 Collections.frequency를 쓰면 된다.
  • 늘 그렇지만.. 조건을 왤케 못짜는걸까
import java.util.Arrays;
import java.util.Collections;
import java.util.Deque;
import java.util.LinkedList;
import java.util.stream.IntStream;

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

        // sliding window
        int needNum = Arrays.stream(number).sum();
        Deque<String> deque = new LinkedList<>(Arrays.asList(discount).subList(0, needNum));

        for (int i = needNum; i <= discount.length; i++) {
            boolean pass = IntStream.range(0, want.length)
                    .noneMatch(j -> Collections.frequency(deque, want[j]) != number[j]);

            if (pass) {
                answer += 1;
            }

            // 조건문 없으면 index 초과.
            if (i < discount.length) {
                deque.pollFirst();
                deque.addLast(discount[i]);
            }
        }

        return answer;
    }
}
profile
개발하는 중국학과 사람

1개의 댓글

comment-user-thumbnail
2023년 7월 6일

스트림 잘쓰시네요.. 잘보고 갑니다!

답글 달기