부족한 금액 계산하기
문제설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 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 합니다.
기본코드
class Solution {
public long solution(int price, int money, int count) {
long answer = -1;
return answer;
}
}
문제풀이
확실히 처음에 비해서 문제 설명 및 제한사항 등의 길이가 길어진 것 같아 1차적으로 당황하였지만
나름의 논리를 전개해나가며 문제를 풀어보았다.
그래서 작성하였던 첫 번째 코드
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
for (int i = 0; i <= count; i++) {
answer += price * i;
}
answer -= money;
return answer;
}
}
비참한 결과.
내 눈으로는 아무리 보아도 뭐가 문제인지 알 수 없었기에 다른 사람들의 코드를 뜯어보았다.
비교하니 바로 문제가 보였다.
내 멋대로 money와 count 값을 변경해버린 것이다. 그 중에서 특히 cout의 index는 기존 int i처럼 소모해버려서
문제가 발생한걸로 보여졌다.
그래서 새로운 변수 i를 설정하고 문제를 풀이해보았다.
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
for (int i = 0; i <= count; i++) {
answer += price * i;
}
answer -= money;
return answer;
}
}
테스트 4에서의 실패.
역시나 아직 나의 부족한 실력으로는 원인 파악이 불가하였고 '질문하기'에서 다른 유저들이 이미 겪었던 시행착오와
답변을 훑으니 원인 파악이 가능했다.
바로 문제에서의 마지막 줄 "단, 금액이 부족하지 않으면 0을 return 하세요." 을 고려하지 않은 것이다.
내가 작성한 코드로는 money가 answer보다 많이 남더라도 (money - answer)한 값을 출력하지 0을
출력하지 못하는 것이다.
해당 부분만 손보니 문제 해결이 가능했다.
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
for (int i = 0; i <= count; i++) {
answer += price * i;
}
if (money > answer) {
answer = 0;
} else {
answer -= money;
}
return answer;
}
}
통과하긴 하였으나 스스로 코드가 너무 지저분하게 보였다.
다른 유저들은 if 문에서 else-if가 필요한 경우가 아니라면 삼항연산자로 깔끔하게 출력하던데
나도 한 번 해보았다.
익숙치않았기에 정말 기초적인 문법임에도 구글링을 하였다.
예시)
int a = (a > b) ? 1 : 2;
// int a는 a가 b보다 클 경우는 1의 값을, 그 반대의 경우 2의 값을 갖는다.
삼항연산자를 통하여 코드를 좀 더 정리할 수 있었다.
Solution.java
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
for (int i = 0; i <= count; i++) {
answer += price * i;
}
answer = (money>answer) ? 0 : (answer -= money);
return answer;
}
}
앞으로는 삼항 연산자도 익숙해져서 보다 깔끔한 코딩이 가능해지길.
그리고 문제도 잘 읽자.
'🤖Algorithm' 카테고리의 다른 글
[프로그래머스] 짝수와 홀수 Java (0) | 2022.07.19 |
---|---|
[프로그래머스] 내적 Java (0) | 2022.07.18 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 Java (0) | 2022.07.18 |
[프로그래머스] 행렬의 덧셈 Java (0) | 2022.07.18 |
[프로그래머스] 핸드폰 번호 가리기 Java (0) | 2022.07.18 |