https://school.programmers.co.kr/learn/courses/30/lessons/82612
정답률도 낮지 않고, 레벨도 1이지만 입문 만큼 간단해 보여 호기롭게 작성했다.
기본으로 제공해 주는 코드에는 int 형의 변수 세 개를 매개변수로 지정해 줬고, 반환되는 변수의 타입은 long형이었다. 여기서 의아해졌다.
class Solution {
public long solution(int price, int money, int count) {
long answer = -1;
return answer;
}
}
그리고 문제를 다시 읽어 봤다. 간략히 설명하자면 한 놀이기구를 처음 타는 데에 드는 돈은 price원, 해당 놀이기구의 탑승 횟수가 늘어날 수록 비용은 탑승 횟수인 count 만큼 배가 된다. 가지고 온 돈이 money라고 했을 때 놀이기구에 내야 하는 총 금액보다 money가 크거나 같을 경우에는 answer에 0을 반환하면 되고, 아닐 경우에는 부족한 금액을 answer에 반환한다.
다 읽고 든 생각... 금방 하겠는데?
그러나 이것은 오만이었다... 처음에는 막힘 없이 풀었던 게 사실이었으므로... 얼마 지나지 않아 테스트하고, 테스트 케이스 몇 개 추가해서 통과해 해당 코드로 제출하기를 눌렀음
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
int sumPrice = 0;
for(int i=0; i<=count; i++) {
sumPrice += price * i;
}
if(money >= sumPrice) return answer = 0;
else return answer = sumPrice - money;
}
}
근데 수많은 파란불들 사이에... 빨간불이 5개나 보이는 거다.
테스트 케이스를 5개나 추가했는데 죄다 통과했기에 대체 뭐가 문제인지 골머리를 앓던 중이었는데 그때 눈에 띄었던 것은
<제한사항>
놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수
제한사항은 평소에 테스트해 볼 때만 참고했던 터라 이번에도 그렇겠지 하고 넘겼는데 유난히 저 많은 0이 눈에 띄었다... 그리고 아까 의아해졌던 게 생각남.
answer를 long으로 줬었지... 어쩐지 왤케 크게 주나 했다.
테스트를 셋 다 제한사항 맥스로 해 보았다. 아니나 다를까 분명 else문이 실행됐을 텐데 0이 담겼다! int형 범위를 초과했던 것이다...
class Solution {
public long solution(int price, int money, int count) {
long answer = 0;
long sumPrice = 0;
for(int i=0; i<=count; i++) {
sumPrice += price * i;
}
if(money >= sumPrice) return answer = 0;
else return answer = sumPrice - money;
}
}
바로 long으로 바꿔 줬다. 채점하기 누른 결과 통과함... 알던 걸 실수한다는 게 이렇게 허탈할 줄이야... 다시는 이런 실수 금지다.
<정리>
공감하며 읽었습니다. 좋은 글 감사드립니다.