class Solution {
public long solution(int price, int money, int count) {
// 등차수열 공식 이용
long payment = (long) price * ((count * (count + 1)) / 2);
return money >= payment ? 0 : payment - money;
}
}
공식 세우고 이를 구현하는건 바로 했다. 근데 테스트 케이스 4개 정도에서 자꾸 찐빠가 나는게 아닌가... 이런건 대부분 데이터가 자료형 범위를 넘어서 오버플로우가 발생하는 경우였다.
long payment = price * ((count * (count + 1)) / 2);
원래 코드는 이거였다. 만약 price * ...
의 값이 int
범위를 넘어서면 에러가 발생한다. 파라미터 타입으로 int
를 사용하고 있기 때문이다. 그래서 price
를 먼저 long
으로 형변환해줘서 연산 결과가 long
이 되도록 했다.
(왜 나는 결과를 저장하는 변수 타입이 long
이면 알아서 연산 도중 long
타입으로 바뀔 것이라고 생각했던걸까...)
이제 알고리즘은 바로바로 떠올리는데 정작 구현능력이 부족하다는 것을 체감 중이다...