일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
- 정수론
- 이진탐색
- SQL
- MySQL
- 정렬
- 그리디
- C++
- C언어
- 해시를사용한집합과맵
- 백준
- 문자열
- 사칙연산
- C
- 구현
- 브루트포스알고리즘
- 프로그래머스sql
- 프로그래머스코딩테스트
- 소수판정
- 논문구현
- 논문리뷰
- 이분탐색
- 백준알고리즘
- 프로그래머스
- 다이나믹프로그래밍
- 프로그래머스연습문제
- 수학
- 그리디알고리즘
- 자료구조
- Image Classification
- 큐
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 프로그래머스 부족한 금액 계산하기 본문
1. 문제이해
https://programmers.co.kr/learn/courses/30/lessons/82612?language=cpp
놀이기구의 이용료 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 형으로 바꿔주지 않아 꽤나 애를 먹었다.😥
다음부터는 주어진 틀이어도 고칠게 없나 더 자세히 살펴봐야지😤
'코딩테스트 > 📘 프로그래머스 (programmers)' 카테고리의 다른 글
[C++] 프로그래머스 x만큼 간격이 있는 n개의 숫자 (0) | 2021.10.13 |
---|---|
[C++] 프로그래머스 멀리 뛰기 (0) | 2021.09.25 |
[C++] 프로그래머스 이상한 문자 만들기 (0) | 2021.09.19 |
[C++] 프로그래머스 정수 내림차순으로 배치하기 (0) | 2021.09.18 |
[C++] 프로그래머스 정수 제곱근 판별 (0) | 2021.09.17 |