백준 실버4 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.
문제
https://www.acmicpc.net/problem/2839
[나의 풀이]
⌛ 28분
N = int(input())
ans = 0
find = False
if N%5==0:
ans = N//5
find = True
else:
bongji5 = N//5+1 # 5kg 봉지 갯수
# bongji3 = 0 # 3kg 봉지 갯수
while bongji5>=0:
rest = N-bongji5*5
if rest<0:
bongji5 -= 1
elif rest>0:
if rest%3==0:
ans = bongji5+rest//3
find = True
break
else:
bongji5 -= 1
if find:
print(ans)
else:
print(-1)
설탕 무게(N)가 입력될 때, 5kg 혹은 3kg 봉지를 활용하여 모든 설탕을 담고자 할 때 최소 봉지 갯수를 구하는 문제입니다.
5kg 봉지만 활용하여 담을 수 있을 때는 바로 정답이므로 조건문으로 설정해 주었습니다.
5kg 봉지의 최대 갯수로 전부 담을 수 없다면 5kg 봉지를 1개씩 줄이며 그 나머지(rest) 설탕 무게를 3kg로 전부 담을 수 있을 때를 구하여 해결하였습니다.
[다른 사람의 풀이1]
sugar = int(input())
bag = 0
while sugar >= 0 :
if sugar % 5 == 0 : # 5의 배수이면
bag += (sugar // 5) # 5로 나눈 몫을 구해야 정수가 됨
print(bag)
break
sugar -= 3
bag += 1 # 5의 배수가 될 때까지 설탕-3, 봉지+1
else :
print(-1)
'나의 풀이'와는 약간 다르게 접근한 풀이입니다.
전체 설탕 무게에서 3kg씩 뺄셈함과 동시에 봉지를 추가하고 남은 설탕 무게를 전부 5kg로 담을 수 있을 때의 봉지 갯수를 합하며 구현한 방식입니다.
이때, 남은 설탕 무게가 음수가 된다면 이는 5kg,3kg 봉지로는 딱 맞아떨어지게 담을 수 없는 경우이므로 -1을 출력하게 하였습니다.
[다른 사람의 풀이2]
num = int(input())
count = 0
while num >= 0:
if num % 5 == 0:
count += int(num // 5)
print(count)
break
num -= 3
count += 1
else:
print(-1)
'다른 사람의 풀이2'와 같이 전체 설탕 무게에서 3kg씩 차감하는 방식의 풀이입니다.
감사합니다.