티스토리 뷰
반응형
🔷 🧾 문제 설명 (BOJ 14916번: 거스름돈)
문제 링크: https://www.acmicpc.net/problem/14916
춘향이는 편의점에서 근무 중이며, 손님이 2원짜리와 5원짜리 동전만 사용해서 거스름돈을 달라고 요청했습니다.
단, 동전의 개수가 최소가 되도록 거슬러 줘야 합니다.
주어진 거스름돈n에 대해, 가능한 최소 개수의 동전 개수를 출력하는 프로그램을 작성하세요.
만약 정확히 거슬러 줄 수 없다면-1을 출력해야 합니다.
- 입력: 정수
n(1 ≤ n ≤ 100,000)- 출력: 최소 동전 개수 또는
-1
🧪 예제
🔷 🧮 🥇 첫 번째 파이썬 코드
N = int(input())
five = N
five_cnt = 0
two = 1
# 먼저 최대한 5로 나누기
while five >= 5:
five -= 5
five_cnt += 1
# 만약 5로만 딱 나눠졌다면 바로 출력
if five == 0:
print(five_cnt)
else:
while True:
if 5 * five_cnt + 2 * two == N:
print(five_cnt + two)
break
elif 5 * five_cnt + 2 * two > N:
five_cnt -= 1
else:
two += 1
if two * 2 > N:
print(-1)
break
🔷 🧠 첫 번째 코드의 내 논리 설명
5원짜리를 최대한 써보되, 안 맞으면 2원짜리를 조합해가며 N을 맞추는 탐색형 사고.
그리디 + 완전탐색 브루트포스가 결합된 구조입니다.
🔷 🥈 두 번째 파이썬 코드 (개선된 버전)
k = int(input())
coin = 0
dc = False
while k >= 0:
if k % 5 == 0:
coin += k // 5
print(coin)
dc = True
break
else:
k -= 2
coin += 1
if not dc:
print(-1)
🔷 🧠 두 번째 코드의 내 논리 설명
"안 되면 2를 빼면서, 5로 나눠질 수 있는 순간을 기다리자"라는 직관적이면서 효율적인 방식입니다.
그리디 사고에 가깝고, 구현이 단순합니다.
→while k >= 0:이 구조 덕분에 조건 처리도 깔끔합니다.
🔷 ✅ 비교 및 결론
필요하시면, 두 코드의 시간복잡도 비교나, 더 최적화된 버전 (예:for루프 방식)도 도와드릴 수 있습니다.
또한 다른 문제들도 같은 방식으로 정리해드릴 수 있습니다.
반응형
'백준 스터디' 카테고리의 다른 글
| 백준 7568번 덩치 문제 풀이 Python (1) | 2025.06.06 |
|---|---|
| BOJ 1343번 폴리오미노 python 풀이 (1) | 2025.06.05 |
| [BOJ 1343] 폴리오미노 C++ 풀이 (0) | 2025.06.05 |
| 🪙 BOJ 14916번: 거스름돈 – 최소 동전 개수 구하기 C++ (1) | 2025.06.02 |
| 🎬 [백준 1436] 영화감독 숌 - "666"이 들어간 n번째 수 찾기 (Python 구현) (1) | 2025.06.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 브루트포스
- python 알고리즘
- 알고리즘
- 문제 풀이
- 코딩
- 코딩테스트
- 그리디
- 프로그래머스
- 상속
- 그래프 탐색
- c언어
- Python
- 알고리즘문제풀이
- 파이썬코딩
- 알고리즘 문제풀이
- DP
- dfs
- 알고리즘기초
- 파이썬
- C++
- 동적계획법
- 문제풀이
- 문자열처리
- 그리디알고리즘
- 프로그래밍
- 객체지향
- HTML
- 백준
- 동적 계획법
- 코딩 테스트
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함
반응형
