문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
슬라이딩 윈도우, 해시맵
풀이
i를 1씩 늘려가며 i 번째 날부터 i + 9번째 날의 품목을 확인해야하므로
i + 1 번째 날부터 i + 9번째 날까지 9개의 원소는 그 다음에도 그대로 탐색된다.
따라서 슬라이딩 윈도우를 사용하여 i 번째 날의 품목의 개수를 1 빼고, i + 10번째 날의 품목의 개수를 1 더하는 연산만 진행한다.
이때 품목이 String으로 저장되어있기 때문에 해시맵을 이용해 품목의 수를 올리고 내린다.
코드
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> map = new HashMap<>();
for (String w : want)
map.put(w, 0);
int left = 0;
int right = 9;
for (int i = 0; i <= 9; i++) {
if (map.containsKey(discount[i]))
map.put(discount[i], map.get(discount[i]) + 1);
}
if (check(map, want, number))
answer++;
while (right < discount.length - 1) {
if (map.containsKey(discount[left]))
map.put(discount[left], map.get(discount[left]) - 1);
left++;
right++;
if (map.containsKey(discount[right]))
map.put(discount[right], map.get(discount[right]) + 1);
if (check(map, want, number))
answer++;
}
return answer;
}
public boolean check(Map<String, Integer> map, String[] want, int[] number) {
for (int i = 0; i < want.length; i++) {
if (map.get(want[i]) != number[i]) {
return false;
}
}
return true;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 연속 부분 수열 합의 개수 (Java) (0) | 2022.11.12 |
---|---|
[프로그래머스] 혼자 놀기의 달인 (Java) (0) | 2022.11.12 |
[프로그래머스] 과일 장수 (Java) (0) | 2022.11.12 |
[프로그래머스] n^2 배열 자르기 (Java) (0) | 2022.11.09 |
[프로그래머스] 등산코스 정하기 (Java) (0) | 2022.11.09 |