거스름돈 [ Python ] [ 백준 : 14916 ]
2023. 5. 25. 19:52ㆍ알고리즘/백준
풀이 및 회고
그리디 문제이므로 큰것부터 빼는 걸로 접근하고 for 문을 사용해 문제를 풀려고 했었다.
하지만 내가생각하는 것 처럼 해가 나오지 않았고 방법을 바꿔 큰것부터가 아닌 적은것 부터 빼는 걸로하고 for 문 대신 while 문을 사용하는걸로 정했다. 2를 먼저빼주면서 카운트 해주고 5의 배수가 된다면 5를 빼고 카운트해줌으로서 값에 도달했다.
문제를 제출하고 코드를 더 바꾸고 싶어 변화를 주었고 변화를 준 코드도 정답에 도달했다.
# # 거스름돈
# # 처음 작성한 코드
# n = int(input())
# coin = [5, 2]
# count = 0
# while True:
# if n % coin[0] == 0: # 5의 배수인 경우
# count = count + n // coin[0]
# break
# else: # 5의 배수가 아니면 2백원씩 뺍니다.
# n -= coin[1]
# count += 1
# if n < 0:
# break
# if n < 0:
# print(-1)
# else:
# print(count)
# 두번째로 작성한 코드
n = int(input())
coin = [5, 2]
count = 0
while n % coin[0] != 0:
n -= coin[1]
count += 1
if n < 0:
break
if n < 0:
print(-1)
else:
count = count + n // coin[0]
print(count)
# # 모세님 코드
# n = int(input())
# max_num5 = n%5
# if n == 1 or n == 3:
# print(-1)
# elif max_num5%2 == 0:
# print((n//5) + max_num5//2)
# else:
# print((n//5)-1 +(max_num5+5)//2)
또 내가 작성한 것이 아닌 모세님이 작성한 코드가 있는데 그리디 문제기에 당연히 반복문을 안쓰고는 풀 수 없다고 생각했다.
하지만 모세님은 반복문 없이 산술연산자로만 문제를 풀어내셨고 분류된 문제더라도 방법이 정말 다양하다는 것을 다시금 느끼게 되었다.
'알고리즘 > 백준' 카테고리의 다른 글
소수 찾기 [ Python ] [ 백준 : 1978 ] (1) | 2023.05.26 |
---|---|
영화감독 숌 [ Python ] [ 백준 : 1436 ] (0) | 2023.05.25 |
최소공배수 [ Python ] [ 백준 : 1934 ] (0) | 2023.05.24 |
ATM [ Python ] [ 백준 : 11399 ] (0) | 2023.05.24 |
동전 0 [ Python ] [ 백준 : 11047 ] (1) | 2023.05.24 |