백준 알고리즘 2839번 설탕 배달, 파이썬
이번 문제는 백준 알고리즘의 2839번 설탕 배달 문제이다.
역시 나는 파이썬으로 풀었다.
문제는 간단한 산수?문제이다.
나는 이거 문제를 보자마자 두 가지 방법이 떠올랐었는데, 하나가 뭐 때문인 지는 모르겠지만 잘 되지 않았다.
일단 문제에 대한 내 생각이다. 맞은 문제부터 생각 정리를 해 보았다.
# 생각 1. 5로 나누어떨어지지 않는 경우에서 주어진 Nkg에 대해, 3을 빼고 count를 1 추가한다.
# 생각 2. 만약 5로 나누어 떨어진다면 count에 5로 나눈 몫을 추가한다.
# 생각 3. 3으로 계속 빼도 3이나 5로 나누어 떨어지지 않는다면, -1을 출력한다.
이게 내 첫번째 생각에 대한 코드이다.
맞은 코드
kg = int(input())
count = 0
while kg != 0:
if kg % 5 != 0:
kg = kg - 3
if kg < 3 and kg >0:
count = -1
break
count = count + 1
else:
count = count + kg/5
break
print(int(count))
이제 뭐가 문제인지 모르겠는데, 틀렸다고 나오는 코드를, 내 생각과 함께 적어보겠다.
혹시 왜 틀렸는지 아시는 분 있으시면 댓글 달아주시면 감사하겠습니다.
틀린 생각
#생각 1. 최소공배수인 15를 기준으로 갯수가 +3씩 반복이 될 것이다.
#생각 2. 그럼 15 밑으로 정확히 나누어 떨어지는 숫자를 딕셔너리에 Key로 넣고 개수를 Value로 놓는다.
#생각 3. 15 이상인 경우는 이제 15로 나눈 몫의 3배와 함께 딕셔너리의 Value값을 더해서 출력한다.
틀린 생각에 대한 내 코드
min_num = {'3' : '1', '5' : '1', '6' :'2', '8':'2', '9':'3', '10':'2','11':'3','12':'4','13':'3','14':'4','15':'3'}
def is_min(kg):
mid = int(int(kg)//15)
nam = str(int(kg)%15)
if int(nam) != 0:
if nam in min_num:
result = int(min_num[nam]) + mid*3
return result
else:
result = -1
return result
else:
result = mid*3
return result
kg = int(input())
print(is_min(kg))
테스트를 몇 개 해 봤는데 다 일치하게 나온다.
무엇이 문제인지 잘 모르겠다.
문제 출처
https://www.acmicpc.net/problem/2839
'코딩테스트 > 백준 알고리즘 풀이' 카테고리의 다른 글
[백준 알고리즘/python] 백준 1193번 분수찾기, 파이썬 (0) | 2020.03.25 |
---|---|
[백준 알고리즘/python] 백준 2292번 벌집, 파이썬 (0) | 2020.03.23 |
[백준 알고리즘/python] 백준 1712번 손익분기점, 파이썬 (1) | 2020.03.21 |
[백준 알고리즘/python] 백준 1316번 그룹 단어 체커, 파이썬 (0) | 2020.03.20 |
[백준 알고리즘/python] 백준 2941번 크로아티아 알파벳, 파이썬 (0) | 2020.03.19 |
댓글