XYZ 마트는 일정 금액을 내면 10일간 회원 자격을 주고, 회원에게 매일 한 가지 품목을 할인.
정현이는 쇼핑할 때 본인이 원하는 물건들을 정확한 수량만큼, 10일 안에 모두 할인받아 살 수 있을 때만 회원가입을 함
연속된 10일 동안, 할인하는 품목들이 want와 number 조건을 정확히 만족하는 시작 날짜가 몇 개인지 세는 문제
- 입력으로 주어지는 것들
want: 정현이가 사고 싶은 상품 이름 목록 (문자열 배열)
number: 각 상품별 원하는 수량 (정수 배열)
discount: XYZ 마트에서 날짜순으로 할인하는 상품 배열
- 먼저 정현이가 원하는 상품과 수량을 HashMap<String, Integer>에 기록한다. (예: "apple" → 2)
- discount 배열에서 10일씩 잘라가며 해당 기간 동안의 할인 상품 빈도를 또 HashMap으로 기록
- 두 맵이 정확히 일치하는지 비교하면, 그 시점에 회원가입하면 된다는 뜻
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
// want, number 배열의 값을 해시맵에 저장
Map<String, Integer> wantMap = new HashMap<>();
for (int i = 0; i < want.length; i++) {
wantMap.put(want[i], number[i]);
}
int answer = 0;
// 슬라이딩 윈도우 방식 i일부터 10일간 할인 상품 조사
// 특정일 i에 회원가입 시 할인받을 수 있는 품목 체크
for (int i = 0; i < discount.length - 9; i++) {
// i일 회원가입시 할인 받는 제품 및 개수를 담을 해시맵
Map<String, Integer> discountMap = new HashMap<>();
// i일 회원가입 시 할인받는 제품 및 개수로 해시맵 구성
for (int j = i; j < i + 10; j++) {
String item = discount[j];
if (wantMap.containsKey(item)) {
discountMap.put(item, discountMap.getOrDefault(item, 0) + 1);
}
}
// 할인 상품 갯수와 원하는 제품과 수량이 정확히 일치하는 경우 카운트 증가
if (discountMap.equals(wantMap)) {
answer++;
}
}
return answer;
}
}
'알고리즘 문제풀이 > 프로그래머스 문제풀이' 카테고리의 다른 글
프로그래머스 문제 풀이 - 완주하지 못한 선수 (해시 맵) (2) | 2025.08.05 |
---|---|
프로그래머스 문제 풀이 - 기능개발(큐) (9) | 2025.08.04 |
프로그래머스 문제 풀이 - 올바른 괄호(스택) (2) | 2025.08.04 |