728x90
https://www.acmicpc.net/problem/2839
나의 풀이
n = int(input())
cnt = 0
while n > 0:
if n % 5 == 0:
cnt += n // 5
n = 0
break
else:
n -= 3
cnt += 1
if n < 0:
break
if n < 0:
cnt = -1
print(int(cnt))
다른 사람의 풀이
import sys
sugar = int(sys.stdin.readline())
bag = 0
while sugar >= 0: #1
if sugar % 5 == 0: #2
bag += sugar // 5
print(bag)
break
sugar -= 3 #3
bag += 1
else: #4
print(-1)
훨씬 간결하다. while~ else을 사용할 수 있는것도 처음 알았고 아직 그리디는 어렵다는 생각이든다.
처음 문제를 보았을때 그리디 문제는 가장 큰수부터 해결해야 한다고 생각해 5로 나누고 남은 숫자로 3을 나눠서 카운트 해줘야 한다고 생각했는데 완전히 반대였다.
#1 : sugar가 양수이거나 0일때까지 반복
#2 : 5로 나누어 떨어지면 나눈 몫을 더해주고 출력 후 반복문 탈출
#3 : 아니면 3을 뺴주고 bag +1
#4 : sugar가 음수가 될때까지 값을 break로 탈출하지 못했으면 -1을 출력
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 10870 파이썬(python) : 피보나치 수 5 (0) | 2022.06.23 |
---|---|
[백준] 11729 파이썬(python) : 하노이 탑 이동 순서 (0) | 2022.06.23 |
[백준] 13305 파이썬(python) : 주유소 (0) | 2022.06.23 |
[백준] 11399 파이썬(python) : ATM (0) | 2022.06.23 |
[백준] 1931 파이썬(python) : 회의실 배정 - (★) (0) | 2022.06.23 |