티스토리 뷰
반응형
🔷 🧾 문제 설명 (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++
- 그리디
- c++알고리즘
- 코딩 테스트
- 동적 계획법
- 인접 행렬
- 그래프 탐색
- 파이썬
- python 알고리즘
- 문제 풀이
- 알고리즘기초
- 동적계획법
- 파이썬코딩
- C++ 알고리즘
- dfs
- 브루트포스
- 백준
- 알고리즘
- DP
- 객체지향
- 알고리즘 문제풀이
- 문자열처리
- c언어
- 프로그래밍
- 코딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형