지-코바

[지코바] 5회차 문제풀이 - 홍님

moonseok 2022. 3. 31. 21:28

문제

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net


풀이

import sys

input = int(sys.stdin.readline())

#max_size에 input을 5로 나눈 몫을 저장
max_size = input // 5
answer = 0

#max_size가 0이며 input을 3으로 나누었을 때 나머지가 0이 아닐때 혹은
#input이 0일 때
if (max_size == 0 and input % 3 != 0) or input == 0:
    #-1값 리턴
    print(-1)
else:
    #i가 max_size부터 0까지 -1씩 증가
    for i in range(max_size, -1, -1):
        #input- (5 * i)값 만큼을 left에 저장
        left = input - (5 * i)
        #left가 3의 배수라면
        if left % 3 == 0:
            #answer은 5로 나눈 몫 i + left를 3으로 나눈 몫
            answer = i + left//3
            break
        #3의 배수가 한번도 되지 않으면 i가 answer의 값이 된다.
        answer = i
        
    print(answer)

 

 

 

 

예외가 발생하는 경우는 7이다.

우선 5의 배수로 나눴을 때 나머지가 0인 경우는 물론 5의 배수이므로 제외하고 나머지가 1,3,4인 경우 3의 배수이거나 5의 배수를 뺐을 때, 3의 배수가 되기에 예외에 있어 자유(?)롭다. 하지만 나머지가 2인경우 3으로 최소 12를 만들어야 이러한 알고리즘이 적용된다.

 

따라서 12이상의 수에서는 제대로 결과가 나왔지만 7의 경우에는 예외처리에 걸리지 않으므로 최소 i값인 0이 answer로 출력되는 결과를 확인할 수 있었다.

 

나는 이 문제를 풀 때 어차피 예외처리 찾느라 시간 걸릴것 같았기에 뇌를 빼고 나머지가 1,2,3,4인 모든 경우를 if else문으로 돌리는 소위 노가다를 하여 컴파일 시간이 오래 걸렸던 것으로 기억한다. 하지만 짜고 보니 알고리즘 만드는 시간이 노가다 하는 시간보다 덜 걸렸을 것 같았기에 후회를 많이 했습니다.

'지-코바' 카테고리의 다른 글

[지코바] 6회차 문제풀이 - 상수님  (0) 2022.04.21
[지코바] 6회차 문제풀이  (0) 2022.04.14
[지코바]3회차 4번문제 풀이  (0) 2022.02.10
[지코바] 3회차 문제풀이  (0) 2022.02.03
[지코바] 2회차 문제풀이  (0) 2022.01.14