목차
정수 N이 입력되면 00시 00분 00초 부터 N시 59분 59초 까지의 모든 시각중 3이 하나라도 포함 되는 경우의 수를 출력.
나의코드
N=int(input())
cnt=0
for k in range(N+1):
if k==3 or k==13 or k==23:
cnt+=3600
continue
for i in range(60):
if i %10==3 or i//10==3:
cnt+=60
continue
for j in range(60):
if j%10==3 or j//10==3:
cnt+=1
print(cnt)
우선 시간, 분, 초단위로 나누어 생각을 해 보았다.
시간 단에서 3이 포함되면 분과 초는 어떤 값이 오더라도 카운팅이 된다. 즉 60*60이 바로 카운팅이 된다.
그리고 contine를 하여 이후 분과 시간에서는 카운팅이 되지 않게 하였다.
이후 분 단에서 3이 포함(1의자리숫자가3 또는 10의자리 숫자가 3)이 되면 초 단에서는 어떤 값이 오더라도 카운팅이 된다.
즉 60이 바로 카운팅이 된다.
마지막으로 초 단에서는 1의자리와 10의자리가 3인경우를 카운팅하면 끝 !
정답코드
# H를 입력받기
h = int(input())
count = 0
for i in range(h + 1):
for j in range(60):
for k in range(60):
# 매 시각 안에 '3'이 포함되어 있다면 카운트 증가
if '3' in str(i) + str(j) + str(k):
count += 1
print(count)
이 문제는 모든 시간의 경우를 하나씩 세면 쉽게 풀수 있다.
왜냐면 하루는 총 86400초 밖에 되지 않아 하나하나 탐색을 해도 시간이 얼마 걸리지 않는다.
1초에 2000만번 연산이 가능한 파이썬에게 10만번도 안되는 연산은 1초도 채 걸리지 않는다.
즉, 100만개 이하일 때는 완전 탐색을 하면 충분하다.
정답 코드는 파이썬의 문법을 정말 잘 활용한 코드 같다.
난 로직적으로 어떤 경우에 카운팅이 되는지를 생각 했다면 정답 코드는 그저 완전 탐색을 위해 str함수와 + 연산자를 사용해서 문자열로 합친 뒤 in 으로 체크 하여 카운팅 하였다.
이런 방법도 기억해 둬야 겠다 !!!
그래도 나 이문제 차근차근 잘 접근해서 푼듯 ㅋㅅㅋ
'코딩테스트[파이썬] > 이것이 코딩테스트다(이코테)' 카테고리의 다른 글
[구현] - 게임 개발 (2) | 2024.01.25 |
---|---|
[구현] - 왕실의 나이트 (2) | 2024.01.25 |
[구현] 상하 좌우 (0) | 2024.01.25 |
[구현] 아이디어를 코드로 바꾸는 구현 (4) | 2024.01.25 |
[그리디] - 1이 될 때까지 (2) | 2024.01.25 |