- 문제

정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.

00시 00분 03초
00시 13분 30초

반면에 다음은 3이 하나라도 포함되어 있지 않으므로 세면 안되는 시각이다.

00시 02분 55초
01시 27분 45초

- 입력 조건

첫째 줄에 정수 N이 입력된다. (0 <= N <= 23)

- 출력 조건

00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다.

- 입력 예시

5

- 출력 예시

11475

- 문제 풀이

해당 문제는 주어진 N까지의 모든 경우의 시각을 하나씩 세서 쉽게 풀 수 있다. 하루는 86,400초이므로, 00시 00분 00초부터 23시 59분 59초까지 모든 경우의 수는 86,400가지 밖에 존재하지 않는다. 따라서, 모든 경우의 수를 세더라도 파이썬으로 2초 안에 문제를 해결할 수 있다.

프로세스를 순차적으로 나열해보면,
1. 00시부터 주어진 N시까지 반목문을 이용 (시간)
2. 00분부터 59분까지 반목문을 이용 (분)
3. 00초부터 59초까지 반목문을 이용 (초)
4. 조건문을 이용하여 3이 포함된 시각이라면 count를 증가

n = int(input())
count = 0

for i in range(N+1):
    for j in range(60):
        for k in range(60):
            if '3' in str(i) + str(j) + str(k):
                count += 1

print(count)

처음 이 문제를 접했을 때는, 조건을 만족하는 경우를 어떻게 찾아야 하는지 먼저 생각했다. 이유는, 모든 경우의 수를 전부 확인한다면 비효율적이라고 생각했고, 시간 제한에 걸릴 거라고 생각했다. 또한, 모든 경우의 수를 확인하면 너무 쉽게 해결할 수 있는 문제이기 때문에, 분명히 어떤 문제가 생길 거라고 생각했다. 그러나 생각보다 경우의 수가 적었기에, 쉽게 해결할 수 있는 문제였다.

출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, 나동빈 지음

profile
코딩하는 물리학도

0개의 댓글