상근이의 귀찮음을 풀어주기 위해 문제를 풀어본다.
5kg만으로 가능한 경우, > 5로 나눴을 때 딱 나누어 떨어진다.(나머지가 0이다) > input값을 5로 나눠준다.
5kg으로 안되면 5kg과 3kg을 섞는 경우 > 5로 나눴을 때 나머지가 3이다.(input을 5로 나누고, 1을 더한다) 혹은 10으로 나눴을 때 나머지가 6 또는 9이다.
3kg만 쓰는 경우 > 3으로 나눴을 때 딱 나누어 떨어진다.(나머지가 0이다)
위의 경우에 해당 안되는 경우 Nkg만큼 배달이 불가능 할 경우 -1을 출력한다.(장사 접자!)
라고 생각을 하고 우선 문제에 접근했다.
해서 나온 코드가 아래와 같다.
order = int(input())
if order % 5 == 0:
print(int(order / 5))
elif order % 5 == 3:
print(int(order / 5 + 1))
elif order % 10 == 6:
print(int((order / 10)*2 + 2), 'a')
elif order % 10 == 9:
print(int((order / 10)*2 + 3), 'b')
elif order % 3 == 0:
print(int(order / 3))
else:
print(-1)
제출 결과 나오는 빨간색 "틀렸습니다"
뭐가 잘못 됐을 지 생각해본다. 19를 넣으면 10으로 나눈 값 1*2에 3kg이 3개 들어가야하므로 3을 더한
5kg 2개, 3kg 3개 해서 총 5가 출력되어야 하는데 6이 출력된다.
이상해서 39를 넣어봤다. 5kg 6개, 3kg 3개로 이번엔 9가 출력되야 되는데 10이 출력된다... 뭔가 하나가 더 출력된다.
뭔가 이상해서 'a'로 출력되는 부분도 임의의 값을 넣어보니 원래 생각한 것 보다 1이 높게 나왔다.
이상해서 테스트용 print를 또 뽑아봤다. 보면 볼수록 이해가 안갔는데 유심히 본 결과 실수를 찾았다...
테스트용에서는 int(order/10)으로 10을 나눈 값에 씌워줬는데 실제로 출력하는 값 'a'와 'b'쪽 구간에는
int를 나눈 값에 바로 씌워준게 아니라 바깥 부분에 씌워줘서 (order/10)이 1.9가 되는 것이 문제였다...
이것을 해결하고 값을 넣으니 원하던 대로 작동한다!
하지만 이번에도 제출 결과는 틀렸다고 나왔다... 모든 경우를 고려했다고 생각했는데 아닌가보다.
내가 한 방식대로면 11을 넣었을 때 -1이 나온다. 21을 넣었을 때도 5가 나와야되는데 7이 나온다.
여러가지 넣고 반례에 해당하는 조건을 추가하고 하다가 다 실패했다...
무식하면 용감하다고 생각나는 경우의 수를 다 써봤는데 예외가 항상 있었다. 다른 방식을 고민해 봐야할 때라고 생각한다.
내일 다시 풀어보기로 한다.
'알고리즘' 카테고리의 다른 글
백준 11651 좌표 정렬하기 2 [개인적인 풀이 과정] (0) | 2021.06.18 |
---|---|
백준 2869 달팽이는 올라가고 싶다 [개인적인 풀이 과정] (0) | 2021.06.17 |
백준 2941 크로아티아 알파벳 [문제 풀이] (0) | 2021.06.16 |
백준 1316 그룹 단어 체커[개인적인 풀이 과정] (0) | 2021.06.16 |
백준 4344번 문제 : 평균은 넘겠지 [지극히 개인적인 풀이 과정] (0) | 2021.06.15 |