| 난이도: ★☆☆ | 풀이 시간: 15분 | 시간 제한: 2초 | 메모리 제한: 128MB |
문제: 정수 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이 하나라도 포함되는 모든 경우의 수를 출력한다. |
일단, 00시 00분 00초 ~ N시 59분 59초까지 모든 시각을 다 확인해본다.
구조적으로 시각은
시: 0 ~ N
분: 0 ~ 59
초: 0 ~ 59
이니까…
N = int(input())count = 0for h in range(N + 1): for m in range(60): for s in range(60): if "3" in str(h) or "3" in str(m) or "3" in str(s): count += 1print(count)
예를 들어 책에서처럼 입력 예시 5를 넣으면 출력 예시 11475가 나오는지 한번 돌려봤다.

정확하게 잘 나온다.
그럼 책은 어떻게 문제를 풀었는지 확인해봤다.
완전 똑같다…… 변수 몇개 빼고는..
물론 막히는 부분에서 ai의 도움을 받아가며 풀기는 했지만 내 스스로 풀어낸게 해석과 똑같아서 소름돋았다 ㅎㅎ
앞으로도 고민해가면서 풀면 모두 내게 되지 않을까..
앞부분 거는 전혀 내 스스로 풀지 않아서 내걸 만들기 위해선 좀 더 연습이 필요할 것 같다. 막막했는데 조금씩 한줄기 빛이 보이는 것 같다.
문제 해설: 이 문제는 하루의 모든 시각을 세어서 쉽게 풀 수 있는 문제로, 하루는 86,400초로 구성되어 있어 경우의 수가 적어 파이썬의 문자열 연산을 통해 3이 포함되어 있는지를 확인할 수 있다. 따라서 시각을 1씩 증가시키며 3의 포함 여부를 검사하면 된다. 전체 경우의 수는 24 × 60 × 60이며, 완전 탐색(Brute Forcing) 유형으로 분류된다. 완전 탐색 알고리즘은 모든 경우의 수를 검사하는 방법이며, 데이터 개수가 적은 경우에 적합하다.
Leave a comment