Baekjoon/IM Level

[백준] 2839 설탕배달 (실버4)

hellosonic 2023. 3. 15. 00:13

문제요약

나의 코드 및 설명(최근)

  • 설탕 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일 전에 접근했던 코드와 비교해본 결과 코드가 매우 간략해지고, 직관적이어졌다.