[TIL] 99클럽 코테 스터디 14일차 TIL - 그리디 : <백준 14916 거스름돈> 문제 풀이 with python

2024. 11. 10. 13:43·Algorithm

Today's keyword : 그리디

 

📌 문제설명

https://www.acmicpc.net/problem/14916

 

📌 문제풀이

"거스름돈"은 주어진 금액을 최소한의 동전 개수로 거슬러 주는 방법을 찾는 문제입니다. 사용 가능한 동전은 2원과 5원짜리로, 이 동전들만으로 정확히 주어진 금액을 만들 수 있어야 합니다. 만약 정확히 거슬러 줄 수 없다면 -1을 출력해야 합니다.

내가 푼 코드

n = int(input())
count = 0
# 5원으로 크게 나누고 안 나눠지면 5원의 개수를 줄임. 
five = n//5  # 5원 동전 개수 
two = 0  # 2원 동전 개수 
while True: 

    remain = (n - (5*five) - (2*two))
    
    if five < 0: 
        print(-1)
        break
        
    # 거스름돈이 남지 않았을 때 최종 동전 개수 출력 
    if remain == 0 : 
        print(five+two) 
        break 
    # 남은 돈이 2원으로 나눠지지 않을 때 5원의 개수를 줄임
    if remain%2 == 1: 
        five -= 1
    else: 
        two = remain//2

다른 정답 코드 

N = int(input())

# 초기화
count = 0

while N > 0:
    # 5로 나누어 떨어지면 5원 동전 최대한 사용
    if N % 5 == 0:
        count += N // 5
        N = 0
    else:
        # 5로 나누어 떨어지지 않으면 2원을 하나 사용하여 남은 금액 줄이기
        N -= 2
        count += 1

# 정확하게 거슬러 줄 수 있는 경우
if N == 0:
    print(count)
# 거슬러 줄 수 없는 경우
else:
    print(-1)

이 문제는 그리디 알고리즘의 대표적인 예제 중 하나로, 최적의 선택을 반복하여 전체 문제의 최적해를 구하려 합니다. 여기서 그리디 접근 방식은 큰 단위의 동전 (5원)부터 최대한 사용해 나가는 것입니다.

거스름돈 동전의 최소 개수를 출력하는 문제이기 때문에 '2원' 짜리 동전과 '5원' 짜리 동전 중 최소가 되도록 '5원'을 우선적으로 거슬러 줍니다. 하지만, 5원을 최대 개수로 거슬렀을 때 남은 돈이 홀수가 되게 되면 '2원' 으로는 거슬러 줄 수 없으므로 5원의 동전 개수를 줄여 남는 돈이 0이 되도록 맞춥니다. 

  1. 5원 동전 최대한 사용: 먼저 주어진 금액 n에서 5원 동전을 최대한 사용하여 남은 금액을 줄입니다.
  2. 2원 동전으로 나머지 처리: 5원 동전으로 나눈 나머지가 2원으로 나눠떨어지면, 2원 동전만 추가로 사용해서 최소 동전 개수를 구할 수 있습니다.
  3. 예외 처리: 5원 동전으로 나눈 나머지가 2원으로 나눠떨어지지 않는 경우, 5원 동전 사용량을 하나씩 줄여가며 나머지를 2원 동전으로 채울 수 있는지 확인합니다.

 

📌 오늘의 회고 

간단한 문제여도 효율성 있게 코드를 짜자

 

 

 

#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL

 

'Algorithm' 카테고리의 다른 글

[TIL] 99클럽 코테 스터디 16일차 TIL - <그리디: 백준 2847 게임을 만든 동준이 > 문제 풀이 with python  (0) 2024.11.13
[TIL] 99클럽 코테 스터디 15일차 TIL - 그리디: <백준 13417 카드문자열>문제 풀이 with python  (0) 2024.11.12
<백준 17070 : 파이프 옮기기 1 > 문제풀이 with python  (2) 2024.11.10
<백준 13335 : 트럭> 문제풀이 with python  (4) 2024.11.09
[TIL] 99클럽 코테 스터디 13일차 TIL - 이진탐색 : 백준 10561 징검다리 문제 풀이 with python  (0) 2024.11.09
'Algorithm' 카테고리의 다른 글
  • [TIL] 99클럽 코테 스터디 16일차 TIL - <그리디: 백준 2847 게임을 만든 동준이 > 문제 풀이 with python
  • [TIL] 99클럽 코테 스터디 15일차 TIL - 그리디: <백준 13417 카드문자열>문제 풀이 with python
  • <백준 17070 : 파이프 옮기기 1 > 문제풀이 with python
  • <백준 13335 : 트럭> 문제풀이 with python
데이by데이
데이by데이
  • 데이by데이
    Carpe Diem
    데이by데이
  • 전체
    오늘
    어제
    • 분류 전체보기 (42) N
      • AI (5)
      • 데이터분석 (5)
      • MLOps (2)
      • 프로젝트 (2)
      • Personal (5) N
      • Algorithm (12)
      • TIL (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    더나은프로그래머되는법
    구간분할
    시계열데이터분석
    LLM
    데이터시각화
    티스토리챌린지
    인과발견
    2025 다짐
    pc알고리즘
    회고
    지수표현변환
    최적화알고리즘
    오블완
    Python
    numpy
    causal discovery
    Rag
    유전알고리즘예제
    개발책추천
    change point analysis
    2024 회고
    유전알고리즘개념
    변화점찾기
    맹그로브고성
    AI
    ai대학원진학
    이상탐지
    change point detection
    #99클럽 #코딩테스트준비 #개발자취업 #항해99 #til
    과학적표기법
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데이by데이
[TIL] 99클럽 코테 스터디 14일차 TIL - 그리디 : <백준 14916 거스름돈> 문제 풀이 with python
상단으로

티스토리툴바