포스트

프로그래머스 — CodeKata 19

부족한 금액 계산하기 — N번째 이용료가 price×N으로 늘어날 때 부족한 금액을 for문 누적과 등차수열 합 공식 두 가지로 푼 풀이

출처: https://school.programmers.co.kr/learn/courses/30/lessons/82612

for문으로 누적하는 풀이와 등차수열 합 공식으로 O(1)에 끝내는 풀이 두 가지다. 어느 쪽이든 price * i 곱셈이 int 범위를 넘을 수 있어서 (long long) 캐스팅을 먼저 해주는 게 핵심이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//https://school.programmers.co.kr/learn/courses/30/lessons/82612

#include <string>
#include <vector>

using namespace std;

// for문 풀이
long long solution(int price, int money, int count)
{
    long long answer = 0;
    long long total = 0;

    for (int i = 1; i <= count; i++)
    {
        total += (long long)price * i;
    }

    answer = total - money;
    return answer > 0 ? answer : 0;
}

// 등차수열 합 공식 풀이 — O(1)
// long long solution(int price, int money, int count)
// {
//     long long total = (long long)price * count * (count + 1) / 2;
//     long long diff = total - money;
//     return diff > 0 ? diff : 0;
// }

핵심 요약 — 회차마다 price×N으로 늘어나는 요금의 누적 합은 등차수열 합 공식 price * count * (count + 1) / 2로 반복문 없이 O(1)에 구할 수 있다. 곱셈 중간값이 int 범위를 넘지 않도록 (long long) 캐스팅을 곱셈 앞에 붙이는 것까지가 풀이의 완성이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.