반응형
나의 코드
작성한 코드는 우선 이와 같다. 이제 풀이를 살펴보자.
function solution(want, number, discount) {
let day = 0, answer = 0;
while(day < discount.length){
let list = shoppingList = want.reduce((a,c,i) => {
a[c] = number[i];
return a;
},{});
let sliced = discount.slice(day, day + 10);
for(let x of sliced){
if(list[x]) list[x] -= 1;
else list[x] = 1;
}
if(Object.values(list).filter(x => x > 0).length === 0) answer++;
day++;
}
return answer;
}
풀이
우선 문제 풀이를 위해 예제를 두자.
want | number | discount |
["banana", "apple", "rice", "pork", "pot"] | [3, 2, 2, 2, 1] | ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] |
몇번째 날에 가입을 할 지에 대한 변수 day, 회원가입 가능한 날을 기록하기 위한 answer 변수를 선언한다.
let day = 0, answer = 0;
이제 discount를 돌면서 차례대로 10일 안에 원하는 물품을 개수에 맞게 구매할 수 있는지 확인해보자.
while(day < discount.length)
우선 쇼핑 리스트를 Object로 표현해보자.
let list = want.reduce((a,c,i) => {
a[c] = number[i];
return a;
},{});
그럼 list 값은 예제에 의하면 다음과 같다.
{ banana: 3, apple: 2, rice: 2, pork: 2, pot: 1 }
이제 회원가입 날을 기준으로 10일 동안 판매하는 품목을 살펴보자.
let sliced = discount.slice(day, day + 10);
day = 0인 경우, sliced의 값은 다음과 같다.
["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice"]
회원가입 가능한 날이 되는 조건은 우선 쇼핑 리스트 list의 품목들의 value가 모두 0이 되어야 한다. 쇼핑 리스트에 있는 모든 품목이 충분히 10일 내 할인 품목 리스트에 있는 경우에만 value가 0이 될 것이다.
for(let x of sliced){
if(list[x]) list[x] -= 1;
else list[x] = 1;
}
이 조건에 맞는 회원가입 날을 판별하기 위해 sliced의 품목을 차례대로 for문으로 돌면서 list에 해당 품목이 존재하는 경우 -1을 그렇지 않은 경우엔 list에 해당 품목을 추가한 후 값을 1로 할당해준다.
이 후, list의 values 중 값이 0이 아닌 품목이 하나라도 있는 경우 해당 day엔 회원가입이 불가능한 날로 간주한다. 원하는 품목을 다 구매한 경우엔 answer 값을 +1 해준다. 그 후 day + 1을 해주어 다음 회원가입 날짜에 대해 또 다시 while 문을 돌며 판별할 수 있도록 한다.
if(Object.values(list).filter(x => x > 0).length === 0) answer++;
day++;
반응형
'자료구조 & 알고리즘' 카테고리의 다른 글
프로그래머스 - 괄호 회전하기 ( 자바스크립트 코드 & 풀이 ) (0) | 2025.01.12 |
---|---|
유클리드 호제법 - 최대공약수 구하기 (자바스크립트 코드) (0) | 2025.01.04 |
프로그래머스 영어 끝말잇기 - 자바스크립트 풀이 (0) | 2025.01.01 |
프로그래머스 구명보트 - 자바스크립트 풀이 ⛵︎ (0) | 2024.12.11 |
프로그래머스 귤 고르기 - 자바스크립트 풀이 🍊 (0) | 2024.12.11 |