https://www.acmicpc.net/problem/2839
#코드
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만 사용해서 나올 수 있는 값을 무시하고 오류 처리
'문제풀이 > #Python' 카테고리의 다른 글
백준(Baekjoon) 1011번 : Fly me to the Alpha Centauri (0) | 2021.11.27 |
---|---|
백준(Baekjoon) 2775번 : 부녀회장이 될테야 (0) | 2021.11.09 |
백준(Baekjoon) 10250번 : ACM 호텔 (0) | 2021.11.08 |