문제풀이/#Python

백준(Baekjoon) 2839번 : 설탕배달

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

2839번: 설탕 배달

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

www.acmicpc.net

 

#코드

N = int(input())
CountValue = N // 5
Success_list = []

for i in range(CountValue+1): #5kg을 최대로 적용 했을 때까지 반복 + 5kg이 하나도 없을 경우 Case 추가
    DefaultValue = N - (5*i) #순차적으로 5Kg을 0~ i 까지 적용 했을 때 남은 값을 기본 값으로 지정
    Checking = DefaultValue%3 # 기본 값에서 3을 나눈 나머지 값이 0일 경우만 확인하기 위해 Checking 변수에 지정
    if Checking != 0: # 나머지 값이 있을 경우 성립하지 않음으로 넘어간다.
        continue
    else:
        Success_list.append(i+DefaultValue//3) # 나머지 값이 없을 경우 리스트에 추가를 해준다.

if bool(Success_list) == False: #리스트에 어떠한 정보가 없을 경우 딱 맞게 구할 수 없는 수 임으로 -1을 출력한다.
    print(-1)
else:
    print(min(Success_list)) #리스트에 정보가 있을 경우 해당 리스트 목록 중 가장 낮은 값을 출력한다.

#풀이과정

1. 입력값 확인

N  = 전체 설탕 Kg

2. 출력 값 확인

1. 3Kg과 5Kg을 합한 수 or 3Kg 수 or 5Kg 수
2. 딱 맞지 않았을 경우 -1

3. 조건 확인

1. 5Kg과 3Kg을 사용해서 최대한 적은 봉지를 들고 가야 한다. (혼용)
2. 3Kg만 가져 갈 수도 있고, 5Kg만 가져갈 수도 있다. (단독)
3. 반드시 딱 맞아 떨어져야 한다 (아닐 경우 -1 출력)

4. 1차 풀이

- 반복문 없이 계산식을 통해서 적용 시도 But 실패 (Fail)

# 실패한 코드 입니다.
Base_5 = N//5
Base_R_5 = N%5
Base_3 = N//3
Base_R_3 = N%3

#어떤 계산으로 할지 판별을 한다
if Base_5 % 3 == 0 and N > 5: #5kg으로 먼저 하고 나머지 3kg으로 딱 맞았을 경우
    Base_3 = Base_R_5 // 3
    print(Base_5+Base_3)
elif Base_R_3 == 0: #3Kg으로 나눴을때 딱맞을 경우
    print(Base_3)
else:
    print("-1")

5. 풀이 중 생각해야 했던 것

1. 계산을 한번에 할지 순차적으로 값을 대입해보면서 찾아낼지
2. 계산 순서
   - 반복문 없이 5Kg 부터 계산을 진행 했을 경우 3Kg만 사용해서 나올 수 있는 값을 무시하고 오류 처리