거스름돈 [ 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)

또 내가 작성한 것이 아닌 모세님이 작성한 코드가 있는데 그리디 문제기에 당연히 반복문을 안쓰고는 풀 수 없다고 생각했다.

하지만 모세님은 반복문 없이 산술연산자로만 문제를 풀어내셨고 분류된 문제더라도 방법이 정말 다양하다는 것을 다시금 느끼게 되었다.