** 이 글을 읽음에 앞서 포스팅 된 소스가 100% 정답은 아님을 밝힙니다.
더욱 유능한 분께서 클린 / 최적의 소스를 짜셨을 가능성이 높습니다.
기록용으로 남기며, 참고만 부탁드립니다.
** 백준 알고리즘은 직접 풀이를 해보시는 것을 권장합니다.
● 문제
난이도[티어] : 실버 5
백준 알고리즘 14916번 문제 거스름돈
https://www.acmicpc.net/problem/14916
● 풀이 방법
거스름돈 액수가 홀 / 짝 인지 여부에 따라 빠르게 구할 수 있는 문제.
● 소스 코드
#include <iostream>
int main(void)
{
int val, coin_5 = 0, coin_2 = 0;
std::cin >> val;
//2원짜리 동전으로 모두 계산할 때..
coin_2 = val/2;
//거스름돈 1원이 남았을 경우, 2원 동전 2개를 빼고 5원 동전 하나 추가
if(val-(coin_2*2) == 1){
if(coin_2 > 1){
coin_2 -= 2;
coin_5 += 1;
}else{
std::cout << -1;
return 0;
}
}
// 2원 동전이 5개 있을 경우.. 5원 동전 2개로 변경
while(coin_2 / 5){
coin_2 -= 5;
coin_5 += 2;
}
std::cout << coin_2 + coin_5;
return 0;
}
먼저 거스름돈 액수를 2원으로 모두 낸다고 가정. 이후 두 단계를 거친다.
남은 금액이 남아있다면(남는다면 무조건 1원).. 2원 동전 2개를 빼고, 5원 동전으로 지불
2원 동전이 5개 이상 내었다면, 5원 동전 2개로 변환.
거스름돈을 줄 수 없는 금액이라면 -1 반환.
● 결과
** 코드 길이가 상이 할 수 있습니다! 그러나 내용물은 같습니다.
이유) 주석 및 더미 소스 유무
'백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘 C/C++] 3474번 문제 풀이: 교수가 된 현우 (1) | 2024.03.24 |
---|---|
[백준 알고리즘 C/C++] 2828번 문제 풀이 : 사과 담기 게임 (0) | 2024.03.13 |
[백준 알고리즘 C/C++] 2217번 문제 풀이 : 로프 (0) | 2024.03.13 |
[백준 알고리즘 C/C++] 1343번 문제 풀이 : 폴리오미노 (0) | 2024.03.13 |
[백준 알고리즘 C/C++] 1005번 문제 풀이 : ACM Craft (0) | 2024.03.11 |