728x90
안녕하세요.
문제
이 문제는 XYZ마트에서 10일간의 회원 자격을 얻고, 이 기간 동안 매일 할인되는 특정 제품들을 구매하는 상황을 모델링 합니다. 목표는 원하는 제품 모두를 할인 가격으로 구매할 수 있는 최적의 10일간을 찾는 것 입니다.
방법
이 문제를 해결하기 위해, 해시맵을 사용하여 원하는 제품 목록과 각 제품의 수량을 따로 생성하였으며, 슬라이딩 윈도우 기법을 사용하여 10일간의 할인 제품 목록을 처리하였습니다.
코드
import java.util.HashMap;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
HashMap<String, Integer> productMap = new HashMap<>();
for (int i = 0; i < want.length; i++) {
productMap.put(want[i], number[i]);
}
HashMap<String, Integer> currentMap = new HashMap<>();
for (int i = 0; i < 10; i++) {
currentMap.put(discount[i], currentMap.getOrDefault(discount[i], 0) + 1);
}
for (int i = 10; i <= discount.length; i++) {
if (currentMap.equals(productMap)) {
answer++;
}
if (i < discount.length) {
currentMap.put(discount[i], currentMap.getOrDefault(discount[i], 0) + 1);
}
currentMap.put(discount[i - 10], currentMap.get(discount[i - 10]) - 1);
if (currentMap.get(discount[i - 10]) == 0) {
currentMap.remove(discount[i - 10]);
}
}
return answer;
}
}
- 해시맵 사용 : "productMap' 해시맵은 원하는 제품과 그 수량을 저장합니다. 'currentMap' 해시맵은 현재 검토중인 10일간의 할인 제품과 그 수량을 저장합니다.
- 슬라이딩 윈도우 : 10일 간격의 윈도우를 할인 목록에 슬라이딩하여 각 10일간의 제품 조합을 검토합니다.
- 조건 검사 : 현재 윈도우가 원하는 제품 목록과 정확히 일치하는지 확인합니다.
성능분석
- 시간 복잡도: O(n), 여기서 n은 'discount' 배열의 길이 입니다. 각 할인 제품은 한 번씩만 처리됩니다.
- 공간 복잡도: O(m) , 여기서 m은 'want' 배열의 길이 입니다.
감사합니다.
728x90
'프로그래머스 문제' 카테고리의 다른 글
[JAVA/프로그래머스] 문자열 내 마음대로 정렬하기 (2) | 2024.01.26 |
---|---|
[JAVA/프로그래머스] N진수 게임 (0) | 2024.01.26 |
[JAVA/프로그래머스] 합승 택시 요금 (1) | 2024.01.25 |
[JAVA/프로그래머스] 영어 끝말잇기 (1) | 2024.01.24 |
[JAVA/프로그래머스] 줄 서는 방법 (0) | 2024.01.23 |