문제
풀이
그리디
n이 5로 나누어 떨어진다면 5원으로 거스름돈을 채울 수 있다. 5로 나누어 떨어지지 않는다면 2원과 같이 채워야 한다. 1원이 아니라 2원이기 때문에, 5로 나눈 나머지를 2원으로 맞춰서 낼 수 없다. 예를 들어 1원 혹은 3원이 남았다면 2원으로 채울 수 없다.
n이 5로 나누어 떨어지지 않는다면, n이 5로 나누어 떨어지거나 n이 0 이하가 될 때까지 2씩 차감한다. n이 0미만이 된다면, 거슬러 줄 수 없는 경우이다.
코드
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
// 5원으로 모두 줄 수 있는 경우
if (n % 5 == 0)
{
cout << n / 5;
}
else
{
// 5원으로 줄 수 없는 경우
int answer = 0;
while (n > 0)
{
// 5로 나누어떨어질 때까지 2 차감
answer++;
n -= 2;
if (n % 5 == 0)
{
answer += n / 5;
cout << answer;
break;
}
}
}
// 1이나 3처럼 거슬러 줄 수 없는 경우
if (n < 0)
{
cout << "-1";
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준][C++] 11000: 강의실 배정 (1) | 2024.02.10 |
---|---|
[백준][C++] 1202: 보석 도둑 (1) | 2024.02.09 |
[백준][C++] 1744: 수 묶기 (0) | 2024.02.05 |
[백준][C++] 1339: 단어 수학 (1) | 2024.02.04 |
[백준][C++] 1049: 기타줄 (0) | 2024.02.03 |