일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부족한 금액 계산하기
- react
- 자연수 뒤집어 배열로 만들기
- utf8mb4
- next #middleware
- .env
- 커밋 한번에
- reacts3
- 프리티어
- elasticIP
- vscode
- 코딩테스트
- axios
- 코드정렬
- EC2
- AWS
- prettier
- useReducer
- MySQL
- dotenv
- 리액트코드정렬
- 자동완성방지
- s3확장자
- Node
- interactive_timeout
- max_allowed_packet
- express
- 리액트
- 제일 작은 수 제거하기
- 프로그래머스
- Today
- Total
Sungtt
Lev.1 부족한 금액 계산하기 본문
프로그래머스 부족한 금액 계산하기
문제 설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.
제한사항
- 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
- 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
- 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수
직접 풀이 결과
function solution(price, money, count) {
let arr = [];
for (let i = 1; count >= i; i++) {
let won = price * i;
arr.push(won);
}
const result = arr.reduce((sum, currValue) => {
return sum + currValue;
});
return result < money ? 0 : result - money;
}
1. 배열을 생성한다.
2. 가격 * n+1 을 배열에 차례대로 push 해준다.
3. reduce함수로 배열의 요소를 전부 더한다.
4. result보다 돈이 많을 경우 0을! 그렇지않으면 부족한 금액을 반환한다.
하면서도 이건 아닌거같은데..싶었다.
채점은 통과했지만, 굳이 배열을 만들 필요가 있나싶었다.
참고 풀이 결과 - 1
function solution(price, money, count) {
let won = 0;
for (let i = 1; count >= i; i++) {
won += price * i;
}
return won < money ? 0 : won - money;
}
배열없이 진행하는 풀이다.
+= (왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입함.)
대입연산자를 통해 변수에 바로 총합을 구한다.
참고 풀이 결과 - 2
function solution(price, money, count) {
const tmp = (price * count * (count + 1)) / 2 - money;
return tmp > 0 ? tmp : 0;
}
console.log(solution(3, 20, 4)); // 10
가우스 계산법을 이용한 코드다.
3 * 4 * 5 / 2 = 30
30 - 20 = 10
참고 풀이 결과 - 3
const solution = (...param) => Math.max((param[0] * param[2] * ++param[2]) / 2 - param[1], 0);
console.log(solution(3, 20, 4)); // 10
1. 매개변수를 스프레드 문법으로 받아온다. param이라는 배열에 인수가 모인다.
2. Math.max 는 인수 중 가장 큰 수를 반환한다.
3. 마찬가지로 가우스 공식을 사용하여 값을 구한다. (3 * 4 * ++4) / 2 = 30
4. 돈이 부족할경우에는 결과값이 양수지만, 돈이 남을 경우엔 무조건 음수가 나오기때문에
Math.max 두번째 인자에 0을 넣어서 비교하고 값을 반환한다..
후기
코드는 가독성이 중요하지않은가!
3번풀이는 짧고 간결하지만 들어오는 인자가 무엇인지 알고있기때문에 읽히는것이 아닐까?
어떤 인자를 받아서 작동하는지 모르는 코드라면 난해했을거같다.
그 점을 생각하면 2번풀이가 처음 보는 사람도 가장 빨리 읽혀, 모두에게 좋은 코드가 아닐까싶다.
'코테' 카테고리의 다른 글
알고리즘의 종류 (0) | 2022.11.27 |
---|---|
Lev.1 같은 숫자는 싫어 (0) | 2022.05.09 |
Lev.1 자연수 뒤집어 배열로 만들기 (0) | 2022.04.20 |
Lev.1 제일 작은 수 제거하기 (0) | 2022.04.19 |
Lev.1 평균값 구하기 (0) | 2022.02.24 |