https://school.programmers.co.kr/learn/courses/30/lessons/131127
코딩테스트 연습 > 연습문제 > 할인 행사
문제 접근
문제 핵심
제품과 수량이 할인하는 날짜가 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려한다.
할인하는 제품은 하루에 하나씩만 구매할 수 있다.
원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수를 return
현이가 원하는 제품들과 해당 제품의 수량을 기록하는 map 생성, 데이터 넣기
static HashMap<String, Integer> cur = new HashMap<>();
for(int i = 0; i < want.length; i++){
wants.put(want[i], number[i]);
}
해당 날짜에서 현이가 원하는 제품들의 수량이 올바르게 있는지 확인할 때 사용하기 위한 List
static List<String> keys;
keys = new ArrayList<>(wants.keySet());
할인하는 제품들을 기록하는 map
static HashMap<String, Integer> cur = new HashMap<>();
validation()
현이가 원하는 제품들의 수량이 모두 있는지 체크하는 용도의 static 메서드
하나라도 만족하지 못하면 return false
만약 validation의 결과가 true 라면 answer(최종 결과물) 증가
public static boolean validation() {
for(String key : keys){
if(cur.getOrDefault(key, 0) < wants.get(key)) return false;
}
return true;
}
첫 번째 날짜부터 10일 동안의 할인 항목 값 넣기 + 검사
for(int i = 0; i < 10; i++){
cur.put(discount[i], cur.getOrDefault(discount[i], 0) + 1);
}
if(validation()) answer++;
11일 ~ 끝나는 날짜
n일날에 할인하는 항목은 추가 (n-10)일에 할인했던 항목은 삭제 + 매번 검사하기
for(int i = 10; i < discount.length; i++) {
cur.put(discount[i - 10], cur.get(discount[i - 10]) - 1);
cur.put(discount[i], cur.getOrDefault(discount[i], 0) + 1);
if(validation()) answer++;
}
정답 코드
import java.util.*;
class Solution {
static HashMap<String, Integer> wants = new HashMap<>();
static HashMap<String, Integer> cur = new HashMap<>();
static List<String> keys;
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
for(int i = 0; i < want.length; i++){
wants.put(want[i], number[i]);
}
keys = new ArrayList<>(wants.keySet());
for(int i = 0; i < 10; i++){
cur.put(discount[i], cur.getOrDefault(discount[i], 0) + 1);
}
if(validation()) answer++;
for(int i = 10; i < discount.length; i++) {
cur.put(discount[i - 10], cur.get(discount[i - 10]) - 1);
cur.put(discount[i], cur.getOrDefault(discount[i], 0) + 1);
if(validation()) answer++;
}
return answer;
}
public static boolean validation() {
for(String key : keys){
if(cur.getOrDefault(key, 0) < wants.get(key)) return false;
}
return true;
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (0) | 2024.09.13 |
---|---|
[JAVA] 프로그래머스 level2 메뉴 리뉴얼 (0) | 2024.08.05 |
[JAVA] 프로그래머스 level2 주차 요금 계산 (0) | 2024.07.28 |
[JAVA] 프로그래머스 level2 순위 검색 (0) | 2024.07.27 |
[JAVA] 프로그래머스 level2 양궁대회 (5) | 2024.07.24 |