문제요약
나의 코드 및 설명(최근)
- 설탕 n킬로그램을 입력하고, for문의 시작지점을 5로 나눈 값으로 하여 0까지 거꾸로 도는 반복분을 작성한다.
이렇게 코드를 작성하는 이유는, 5킬로그램의 봉지가 많아야지만 더 적은 개수의 봉지를 배달할 수 있기 때문이다. 즉, 입력받은 설탕이 5로 나누어떨어져, 5킬로그램의 봉지로 전부 배달하면 좋겠지만, 나누어 떨어지지 않는 경우엔 5킬로그램의 봉지 개수를 최대화해야한다. 따라서 입력받은 설탕에서 나올 수 있는 가장 최대의 5킬로그램 봉지의 개수부터 시작하여, 5킬로그램의 봉지를 아예 못 배달하는 경우까지 생각하기 위해 역순의 for문을 작성하였다. - 만약 for문 안에 조건에서 나누어 떨어진다면, 설탕을 5로 나눈 몫과 3으로 나눈 몫을 더한 값을 출력하고 그대로 for문을 탈출한다.
만약 i (설탕을 5로 나눈 몫)가 0(5킬로그램의 봉지로 배달 불가)인 경우 중 설탕이 3으로 나누어 떨어진다면, 3으로 나눈 몫을 출력하고, 그렇지 않다면(절대 나누어떨어지지 않는다면) -1을 출력한다.
n = int(input())
sugar = [3, 5]
for i in range(n//sugar[1],-1,-1): #3,2,1,,,,0
if (n - (i*sugar[1])) % sugar[0] == 0:
print(i + (n-(i*sugar[1])) // sugar[0])
break
if i == 0:
if n % sugar[0] == 0:
print(n//sugar[0])
else:
print(-1)
피드백
10일 전에 접근했던 코드와 비교해본 결과 코드가 매우 간략해지고, 직관적이어졌다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 11399 ATM (실버4) (0) | 2023.03.15 |
---|---|
[백준] 10163 색종이 (브론즈1) / 서브태스크, 시간초과 해결 (0) | 2023.03.15 |
[백준] 8958 OX퀴즈 (브론즈2) (0) | 2023.03.14 |
🥇[백준] 2116 주사위 쌓기 (골드5) / dict() ; rotate[key] >> value (0) | 2023.03.14 |
[백준] 12927 배수 스위치 (실버4) (2) | 2023.03.14 |