230727 coding test 연습 기록

Viperse·2023년 7월 27일
기록용 문서

프로그래머스 - '부족한 금액 계산하기'

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으로 바꿔 줬다. 채점하기 누른 결과 통과함... 알던 걸 실수한다는 게 이렇게 허탈할 줄이야... 다시는 이런 실수 금지다.

<정리>

  • int형 값의 범위 : -2147483648 ~ 2147483647
  • long형 값의 범위 : -9223372036854775808 ~ 9223372036854775807
profile
내 인생 그려 보기

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

공감하며 읽었습니다. 좋은 글 감사드립니다.

답글 달기