728x90
반응형
https://www.acmicpc.net/problem/14916
문제를 풀면서 몰랐던 개념
- 어떤 계산의 몫이 3이라고 하자. 그 몫에서 1을 빼주어서 2로 만들어주고 싶을 때는 나머지에 나누는 수를 더해주면 됨.
ex) n // 5 = 3
3 -> 2 로 취급해서 계산을 하고 싶다면,
(n % 5)에 + 5 를 해주기!
문제의 접근 방법
- 거스름돈이 1과 3일 경우에는 5와 2 모두로 나누어 떨어질 수 없기 때문에 계산 불가하다. 따라서 -1을 출력해주어야 함.
- 거스름돈이 5로 나누었을 때의 나머지가 짝수이면, 2로 나눌 수 있다는 것이므로 5로 먼저 나눠준 후(최대 횟수로) 남은 값을 2로 나눠주기.
- 거스름돈이 5로 나누었을 때의 나머지가 홀수이면, 2로 나눌 수 없다는 것이므로 5로 먼저 나눈 몫에서 1을 뺀 후, 5로 나눈 나머지에 5를 더해서 2로 나눠주기.
내가 막혔던 부분
- 5로 나누었을 때의 나머지가 홀수일 경우에 어떻게 구현해야하는지 조금 헤맸다.
문제 풀이 방법
주석 참고.
소스코드
n = int(input()) # 거스름돈 액수 n
tmp = n % 5 # 반복해서 나오는 식을 간단하게 변수로 선언해두기
if n == 1 or n == 3: # 거스름돈이 1이나 3이면 거슬러줄 수 없으므로 -1 출력
print(-1)
elif tmp % 2 == 0: # n이 5로 나누었을 때의 나머지가 짝수이면(2로 나눌 수 있으면)
print((n // 5) + (tmp // 2)) # 5로 나눴을 때의 몫 + 그 나머지를 2로 나눴을 때의 몫.
else: # n이 5로 나누었을 때의 나머지가 홀수이면(2로 나눌 수 없음)
print((n // 5) - 1 + (tmp + 5) // 2) # 5로 나눴을 때의 몫에서 1을 빼준 값 + 그 나머지에 5를 더해준 후 2로 나눴을 때의 몫.
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] Yangjojang of The Year : 11557번 - Python (0) | 2022.06.02 |
---|---|
[백준] 방탈출 : 15729번 - Python (0) | 2022.06.01 |
[백준] 포인트 카드 : 14471번 - Python (0) | 2021.10.04 |
[백준] 에너지 드링크 : 20115번 - Python (0) | 2021.09.07 |
[백준] 책 정리 : 1434번 - Python (0) | 2021.09.06 |