-
[구름톤 챌린지] 2주차 8.통증코딩 챌린지 2023. 8. 23. 23:01
N = int(input()) numOfItems = 0 while N >= 14*pow(10, 6): N -= 14*pow(10, 6) numOfItems += 1*pow(10, 6) while N >= 14*pow(10, 5): N -= 14*pow(10, 5) numOfItems += 1*pow(10, 5) while N >= 14*pow(10, 4): N -= 14*pow(10, 4) numOfItems += 1*pow(10, 4) while N >= 14*pow(10, 3): N -= 14*pow(10, 3) numOfItems += 1*pow(10, 3) while N >= 14*pow(10, 2): N -= 14*pow(10, 2) numOfItems += 1*pow(10, 2) while N >= 14: N -= 14 numOfItems += 1 while N >= 7: N -= 7 numOfItems += 1 while N >= 1: N -= 1 numOfItems += 1 print(numOfItems)
이번 문제는 어렵지 않게 풀었다.
숫자 N이 주어지면 14, 7, 1을 최소한으로 사용해 N이 0 이 될 때까지의 사용한 14, 7, 1의 개수의 총합을 최소한으로 유지하는 문제였다. greedy algorithm과 관련이 있다는 설명에 따라 처음에는 while을 사용해 N을 14 이상일 경우 14를 계속 빼주고 14 미만 7 이상일경우 7을 지속적으로 빼주고 7 미만일 경우 1을 빼주었다. 이렇게 3가지 경우로만 나눠서 N을 처리했을 때 테스트 케이스에서는 문제가 없었으나, 제출을 누르고 나니 Timeout으로 Fail 한 케이스들이 있었다. 그래서 수가 너무 크면 문제가 생기는 것 같아 그냥 무식하게 14에 10의 6승부터 10의 1승까지 곱해준 while문들을 추가해 해결해 주었다. 무식한 해결책이지만 작동하는 것 같다. 10의 6승이라는 숫자는 10^9 / 14를 해주었을 경우에 10^6으로 나눠주면 십의자릿수까지 N이 남기 때문에 10의 6승으로 정했다.
'코딩 챌린지' 카테고리의 다른 글
[구름톤 챌린지] 4주차 문제18. 중첩 점 (0) 2023.09.10 [구름톤 챌린지] 2주차 7.구름 찾기 깃발 (0) 2023.08.23 [구름톤 챌린지] Day4 완벽한 햄버거 만들기 (0) 2023.08.18 [구름톤 챌린지] 1주차 Day3 합 계산기 (0) 2023.08.17 [엘카데미 챌린지] Bard로 만드는 MBTI 검사 웹사이트 8일차 (0) 2023.08.06