새롭게 나온 레벨 2 문제인데 입력값이 크지도 않고 로직이 복잡한 것도 아니라서 어렵지 않다.
어느 기업인지는 기억이 안나지만 코딩 테스트에서 비슷한 문제를 풀었던 기억이 있다.
로직
i일부터 10일동안 할인 품목을 map에 넣는다. 그리고 각 품목을 비교하는데 하나라도 number보다 작으면 안 되므로 작은 값이 나오면 탐색을 중단한다. 또한 map에 want 품목이 하나라도 없으면 안 되므로 마찬가지로 탐색을 중단한다.
모든 조건이 맞으면 answer 값을 증가시킨다.
최종 코드
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
// i부터 10일간 할인 품목 map에 넣기
for(int i = 0; i < discount.length; i++) {
Map<String, Integer> dis = new HashMap<>();
int cnt = 0;
for(int j = i; j < discount.length; j++) {
// 10일이 지나면 중단
if(cnt == 10) {
break;
}
dis.put(discount[j], dis.getOrDefault(discount[j], 0) + 1);
cnt++;
}
// number와 map의 값을 비교
boolean flag = false;
for(int j = 0; j < want.length; j++) {
// map에 want 물품이 없으면 탐색 종료
if(dis.get(want[j]) == null) {
flag = true;
break;
}
// map의 값보다 want 값이 크면
if(number[j] > dis.get(want[j])) {
flag = true;
break;
}
}
if(!flag) {
answer++;
}
}
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 단어 변환 (0) | 2022.10.11 |
---|---|
(Java) 프로그래머스 - 혼자 놀기의 달인 (0) | 2022.10.07 |
(Java) 프로그래머스 - 네트워크 (0) | 2022.10.06 |
(Java) 프로그래머스 - 야근 지수 (0) | 2022.10.05 |
(Java) 프로그래머스 - 최고의 집합 (0) | 2022.10.04 |