[Node.js_4기] 코드카타 : 할인행사 (24/03/08)
2024. 3. 11. 09:10ㆍ공부/코테준비
목차
1. 문제
코딩테스트 연습 - 할인 행사 | 프로그래머스 스쿨 (programmers.co.kr)
2. 시도
function solution(want, number, discount) {
let answer = 0;
let jh = new Map();
let len_want = want.length;
let len_dis = discount.length;
for(let i = 0; i<len_want;i++){
jh.set(want[i],number[i])
}
for(let j = 0; j<len_dis;j++){
const jh2 = new Map(jh)
for(let k = j; k<j+10;k++){
const item = discount[k];
if (jh2.has(item)){
const count = jh2.get(item);
if(count <= 1){
jh2.delete(item);
}
else{
jh2.set(item,count-1)
}
}
}
if(jh2.size === 0){
answer ++
}
}
return answer;
}
3. 결과
테스트 1 〉 | 통과 (31.74ms, 37.7MB) |
테스트 2 〉 | 통과 (103.98ms, 40.4MB) |
테스트 3 〉 | 통과 (43.69ms, 38MB) |
테스트 4 〉 | 통과 (67.69ms, 39MB) |
테스트 5 〉 | 통과 (30.26ms, 40.1MB) |
테스트 6 〉 | 통과 (43.51ms, 37.7MB) |
테스트 7 〉 | 통과 (21.52ms, 38.7MB) |
테스트 8 〉 | 통과 (61.08ms, 43.2MB) |
테스트 9 〉 | 통과 (12.11ms, 38.6MB) |
테스트 10 〉 | 통과 (60.92ms, 39.9MB) |
테스트 11 〉 | 통과 (30.41ms, 37.8MB) |
테스트 12 〉 | 통과 (0.27ms, 33.3MB) |
4. 배운점
Map 함수를 이용하여 푸는 문제입니다.
jh라는 이름의 새로운 Map을 생성하고 want 배열의 각 요소와 number 배열의 각 요소를 Map에 추가합니다.
discount 배열을 순회하면서 아래와 같은 로직을 수행합니다.
- discount 배열을 10개 단위로 잘라서(j부터 j+9까지), 잘린 부분을 jh2라는 새로운 Map에 복사합니다.
- jh2를 순회하면서 해당하는 상품의 개수를 조사하고, 해당 개수를 갱신합니다.
- 만약 상품의 개수가 1 이하이면 Map에서 해당 상품을 삭제합니다.
- 만약 상품의 개수가 1 초과이면 개수를 1 감소시킵니다.
- 만약 jh2의 크기가 0이 되면(jh2가 비어있다면) answer를 증가시킵니다.
- 최종적으로 answer를 반환합니다.
이 함수의 목적은 discount 배열의 부분 배열 중에서, 해당 부분 배열에 있는 상품들을 모두 제거하여 want 배열에 있는 상품을 구매할 수 있는 경우의 수를 찾는 것입니다.
결과적으로로 answer에는 discount 배열의 어떤 부분 배열이 want 배열의 상품을 모두 제거하는데 사용될 수 있는지에 대한 경우의 수가 저장됩니다.
'공부 > 코테준비' 카테고리의 다른 글
[Node.js_4기] 코드카타 : 멀리뛰기 (24/03/14) (0) | 2024.03.14 |
---|---|
[Node.js_4기] 코드카타 : 가장 큰 수 (24/03/11) (1) | 2024.03.12 |
[Node.js_4기] 코드카타 : n개의 최소 공배수 (24/03/07) (0) | 2024.03.07 |
[Node.js_4기] 코드카타 : 피보나치 수열 (24/02/26) (0) | 2024.02.26 |
[Node.js_4기] 코드카타 : 이진 변환 반복하기 (24/02/22) (0) | 2024.02.22 |