이것이 코딩테스트다 - ch04 구현 예제 문제
00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하라
N : N시
00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수
0 <= N <= 23
time : 2 s
def solve(N):
# 완전탐색
cnt = 0
for h in range(N + 1):
for m in range(60):
for s in range(60):
if "3" in str(h) + str(m) + str(s):
cnt += 1
return cnt
완전탐색으로 구현한다면 간단하지만 탐색량이 N * 60 * 60이 된다. 이를 다음과 같은 사항를 이용해서 구현할 수 있다.
def solve_efficient(N):
cnt = 0
cnt_include_3 = 3600
cnt_not_include_3 = 1575
for h in range(N + 1):
if "3" in str(h):
cnt += cnt_include_3
else:
cnt += cnt_not_include_3
return cnt
class testSolve(unittest.TestCase):
def testcase(self):
self.assertEqual(solve(5), 11475)
unittest.main()