Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- TIL
- node.js
- 인접리스트
- nestjs
- Deep Dive
- css
- Spring
- bean
- 탐욕법
- GraphQL
- javascript
- typescript
- REST API
- Kubernetes
- java
- Linux
- MySQL
- 프로그래머스
- 코딩테스트
- JWT
- winston
- dfs
- 알고리즘
- puppeteer
- Interceptor
- html
- LifeCycle
- OOP
- 인접행렬
- 자료구조
Archives
- Today
- Total
처음부터 차근차근
[프로그래머스] Lv1 예산 본문
728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12982
문제 설명
내 풀이
function solution(d, budget) {
// 1. sort로 예산을 작은 수로 정렬한다.
d.sort((a,b) => a-b)
// 2. total 예산을 선언
let total = 0;
// 3. 반복문을 진행하면서 total 예산을 더해준다
for (let i = 0; i <d.length; i++) {
total += d[i]
// console.log(total)
// 3-1. 예산이 딱 맞는 경우
if (total == budget) {
return i + 1
}
// 3-1 total 값이 예산보다 큰 경우
if (total > budget) {
return i
}
}
// 4. 반복문을 다 하고도 예산이 남은 경우
return d.length
}
1. 예산을 작은 것부터 정렬한다.
작은 예산부터 넣어야 최대한 많은 부서를 넣을 수 있기 때문이다.
2. 반복문을 진행하면서 예산을 추가한다.
예산이 딱 맞는 경우에는 인덱스 i + 1을 하였고,
더했을 때 total 금액이 예산보다 큰 경우에는, 최종적으로 예산을 추가했던 부서를 빼야하기 때문에
i를 하였다.
예산이 남는 경우도 있으니 이러한 경우는 부서의 개수를 return하였다.
다른 사람의 풀이
function solution(d, budget) {
return d.sort((a, b) => a - b).reduce((count, price) => {
return count + ((budget -= price) >= 0);
}, 0);
}
reduce 메서드를 활용한 풀이법
((budget -= price) >= 0)
이 부분이 가장 간결해 보였으며 "+ ((budget -= price) >= 0)" 이 부분이 boolean 계산의 값에 따라 0 또는 1이 된다고 한다.
(true = 1, false = 0인 암묵적 변환을 이용)
이렇게 하여 부서 추가가 가능하면 1, 안된다면 0을 하여 얼만큼 카운트 되었는지 알 수 있다.
단지, 예산 한도보다 추가되었을 경우에도 계속 계산한다는 단점이 존재.
오늘 배운 점
- 암시적 형변환을 이용하는 방법
'코딩테스트 > Javascript' 카테고리의 다른 글
[프로그래머스] Lv2 최솟값 만들기 (0) | 2023.10.31 |
---|---|
[프로그래머스] Lv2 올바른 괄호 (0) | 2023.10.31 |
[프로그래머스] Lv1 나머지가 1이 되는 수 찾기 (1) | 2023.10.31 |
[프로그래머스] Lv0 캐릭터의 좌표 (0) | 2023.10.31 |
[프로그래머스] Lv0 7의 개수 (0) | 2023.10.31 |