알고리즘/프로그래머스

부족한 금액 계산하기

개발 공주 2023. 6. 16. 21:48
728x90

내가 쓴 풀이

class Solution {
    public long solution(int price, int money, int count) {
        long a = 0;
        long answer = 0;
        for (int i = 1; i <= count; i++) {
            a += i * price;
        }
        if(a > money){
            answer = a - money;
        }
        return answer;
    }
}

뭔가 좀 더 간결하게 할 수 있을거 같은데....

 

수정한 결과

class Solution {
    public long solution(int price, int money, int count) { 
        long num = 0;
        for(int i = 1; i <= count; i++){
            num += price * i;
        }
        return num - money < 0 ? 0 : num - money;
    }
}

 

처음에는 리턴타입이 long인데 a변수를 int로 선언해서 엉청난 삽질을 했다... 앞으로 이런 실수는 없을거다......

ㄹㅇ킹받드라슈

 

그리고 또 하나

 

아래 코드는 같이 페어로 알고리즘 문제를 푸시는 분이 오류가난다고 하셔서 왜 오류인지 분석을 해보았다....

 

문제에서 조건이 있는데
위에 문제에서 제한사항을 참조하자
보면 price, money, count는 int로 받아왔다.
아래 for 문을 보면 price 곱하기 i 가있는데 i는 카운트 값만큼 반복한다.
근데 여기서 price 곱하기 i 가 언제 가는 값이 커지다 못해 int 범위를 초과해버린다.
그 초과한 값을 money에 더하려고 하니 오류가 났던 것이었다... 오늘 하나 배워간다 이렇게 타입 하나하나 섬세하게 고려해야겠다는 걸 한 번 더 나의 머리에 상기시켰다.

class Solution {
    public long solution(int price, int money, int count) {
        long answer = -1;

        for(int i=1; i<=count; i++){
        money -= price * i;
        }
        answer = (money < 0)? (long)money * (-1):0;

        return answer;
    }
}

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

이상한 문자 만들기  (0) 2023.06.20
완주하지 못한 선수 ver_1  (0) 2023.06.20
내적  (0) 2023.06.16
나누어 떨어지는 숫자 배열  (0) 2023.06.16
부분 문자열 인지 확인하기  (0) 2023.06.07