문제 설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 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는 자연수
입출력 예
price | money | count | result |
3 | 20 | 4 | 10 |
입출력 예 설명
입출력 예 #1
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.
나의 풀이
생각1. 금액이 부족하지 않으면 0을 return해야하는데 고려하지 않고 작성함.
생각2. payment가 int형이면 안되고 보다 큰 long형이여야한다.
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
long payment = 0;
for(int i=1;i<=count;i++){
payment += price*i;
}
if(payment>money) {
answer = payment - money;
}
return answer;
}
}
다른 사람의 풀이
1. Math.max를 사용한 코드
- Math.max를 사용하면 비교문 없이 개발이 가능하다.
- (count * (count+1) / 2)를 하여 총 합산한 개수를 구함으로 for문을 돌리지 않아도 된다.
💡 Math.max() : 괄호 안에 있는 숫자 중에서 가장 큰 수를 결과값으로 리턴
class Solution {
public long solution(long price, long money, long count) {
return Math.max(price * (count * (count + 1) / 2) - money, 0);
}
}
더해야 한다!라고 했을 때 무조건 for문을 돌리지 말고 수열 같이 간단하게 계산하는 방법이 있으면 해당 방법을 고안해보자
2. if문 대신 삼항연산자
- return에 삼항연산자를 넣어 if문을 줄였다.
- 마이너스(-)로 계산하여 answer을 바로 return할 수 있게 하였다.
class Solution {
public long solution(int price, int money, int count) {
long answer = money;
for (int cnt = 0; cnt < count; ++cnt) {
answer -= (price * (cnt + 1));
}
return (answer > 0 ? 0 : -answer);
}
}
앞으로 코드를 짜고 난 뒤에 결과만 보는 것이 아니라 어떻게 코드를 간결하게 줄일 수 있을 것인가를 생각해보자!!
https://programmers.co.kr/learn/courses/30/lessons/82612
코딩테스트 연습 - 1주차
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이
programmers.co.kr
'알고리즘 > 문제풀이' 카테고리의 다른 글
[LeetCode] 13. Roman to Integer (Easy) 풀이 (0) | 2022.03.14 |
---|---|
[LeetCode] 9. Palindrome Number (Easy) 풀이 (2) | 2022.03.11 |
[LeetCode] 1. Two Sum (Easy) 풀이 (1) | 2022.03.11 |
[프로그래머스] 코딩테스트 연습 - 평균 구하기 Java, JavaScript (1) | 2021.08.25 |
[프로그래머스] 코딩테스트 연습 - 핸드폰 번호 가리기 Java (1) | 2021.08.24 |