초보 개발자의 이야기, 릿허브

[C++] 프로그래머스 부족한 금액 계산하기 본문

코딩테스트/📘 프로그래머스 (programmers)

[C++] 프로그래머스 부족한 금액 계산하기

릿99 2021. 9. 22. 09:43
728x90
반응형
1. 문제이해

https://programmers.co.kr/learn/courses/30/lessons/82612?language=cpp 

 

코딩테스트 연습 - 1주차_부족한 금액 계산하기

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이

programmers.co.kr

 

놀이기구의 이용료 price, 처음가지고 있던 금액 money, 놀이기구의 이용횟수 count가 주어진다.

놀이기구의 이용료는 N번째 이용할 경우, 원래 이용료의 N배를 받게 된다.

이 경우, 놀이기구를 count번 타게 될 때,

현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 리턴하는 것이 목표이다.

(단, 돈이 모자라지 않을 경우에는 0을 출력한다.)

 

 

 

2. 문제풀이

 

놀이기구의 총 이용요금을 구하고, 가지고 있던 금액에서 얼마가 부족한지,

총 이용요금 - 가지고 있던 금액 을 구하면 되는 문제이다.

단, 총 이용요금보다 가지고 있던 금액이 크거나 같은 경우,

돈이 모자라지 않을 경우에는 0을 출력해야한다.

즉, 놀이기구의 총 이용요금을 구하는 것이 핵심이다.

 

총 이용요금을 구하는 방법은 간단하다.

이용료가 price원인 놀이기구를 N번째 이용하면, 원래 이용료의 N배를 받게 된다.

즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상되게 된다.

 

위 입출력 예를 보자.

놀이기구의 이용료 : 3 , 가지고 있던 돈 : 20, 이용횟수 : 4

여기서, N번째 탑승하는 놀이기구의 이용료 = 놀이기구의 이용료 x N 이므로,

1 번째 탑승 : 3 x 1 = 3

2번째 탑승 : 3 x 2 = 6

3번째 탑승 : 3 x 3 = 9

4번째 탑승 : 3 x 4 = 12

따라서, 놀이기구의 총 이용요금(cost) = 3 + 6 + 9 + 12 = 30(원)이다.

가지고 있던 돈보다 놀이기구의 총 이용요금이 더 많으므로, (money < cost)

모자란 돈 = 총 이용요금 - 가지고 있던 돈 = 30 - 20 = 10(원)이 된다.

 

위의 예에서 볼 수 있듯,

놀이기구의 총 이용요금 = ( N번째 탑승하는 놀이기구의 이용료 = 놀이기구의 이용료 x N )의 합이다.

여기서 N의 범위는 1 ~ count(놀이기구 이용횟수) 이다.

놀이기구의 총 이용요금을 구한 뒤에는, 총 이용요금과 원래 가진 금액을 비교하여,

돈이 모자라면 총 이용요금 - 가지고 있던 돈,

돈이 모자라지 않으면 0을 리턴하면 된다.

 

주어진 틀은 다음과 같았다.

 

 

 

 

3. 소스코드
using namespace std;

long long solution(int price, int money, int count) {
    long long answer = -1;   // int -> long long 형으로 바꿔줌
    long long cost = 0;      // 놀이기구의 총 이용금액
    
    for(int i = 1; i <= count; i++) {
        // i번째 이용했을 때의 금액을 총 금액에 더해줌
        cost += price * i;  
    }
    
    if(money >= cost) {   // 가지고 있는 돈이 이용요금보다 많거나 같은 경우
        answer = 0;
    }
    else {                // 가지고 있는 돈이 이용요금보다 부족한 경우
        answer = cost - money;
    }

    return answer;
}

주어진 틀에서 놀이기구의 총 이용금액을 뜻하는 cost 라는 long long 형 변수를 추가했다.

for문을 통해 놀이기구의 총 이용금액을 구하고,

((N번째 탑승하는 놀이기구의 이용료 = 놀이기구의 이용료 x N)의 합을 이용해 구해주었다.)

이용금액보다 가지고 있는 돈이 많거나 같은 경우,

즉, 돈이 부족하지 않은 경우에는 "0"을 리턴,

이용금액보다 가지고 있는 돈이 적은 경우,

즉, 돈이 부족한 경우에는 "총 이용요금 - 가지고 있던 돈"을 리턴해주었다.

 

위 코드에서 주의할 점이 하나있다.바로 주어진 틀에서의 answer이다.

본래 주어진 코드에서는 int형으로 선언이 되어있으나,

함수의 반환형이 long long 형이므로 long long 형으로 바꾸어줘야 알맞은 결과를 리턴할 수 있다.

(필자도 여기서 시간을 많이 잡아먹었다.😥)

 

 


프로그래머스 위클리챌린지 1주차, 부족한 금액 계산하기 문제였다.

프로그래머스 위클리챌린지 문제는 종종 도전을 해봤었는데,

이번에는 블로그에도 한번 정리를 해보았다.🤗

구현은 크게 어렵지 않은 문제였지만,

answer 부분을 long long 형으로 바꿔주지 않아 꽤나 애를 먹었다.😥

다음부터는 주어진 틀이어도 고칠게 없나 더 자세히 살펴봐야지😤

 

 

 

 

 

728x90
반응형