문제 링크
할인 행사
풀이
- 배열을 하나하나 탐색하면서 이번엔 조건에 부합하는가? 를 묻는 문제다.
- 이런 경우 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;
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;
}
if (i < discount.length) {
deque.pollFirst();
deque.addLast(discount[i]);
}
}
return answer;
}
}
스트림 잘쓰시네요.. 잘보고 갑니다!