티스토리 뷰

코딩테스트 대비

[이코테] 시각

happy_dohee 2022. 2. 10. 13:58

정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하세요. 

 

n = int(input())
count = 0
for i in range(n+1):
  if "3" in str(i):
    count = count + 3600
  else:
    count = count + (15 * 60 + (60-15) * 15)

print(count)

나는 그냥 계산했다.

시간에 3이 포함되면 60초 * 60분 = 3600 번은 3이 모두 포함되는 시간이므로,  if "3" in str(i)로 따로 이 경우를 나눠주었고, 그렇지 않은 경우에는, 

1분당 3초/13초/23초/30~39초/43초/53초 이렇게 15번 3이 포함된 시간이 찾아온다.

그러나, 3분/13분/23분/30~39분/43분/53분 에는 00초 부터 59초 까지 모두가 3이 포함된 시간이므로, 60번 찾아온다.

==> 15 * 60 + (60 - 15) * 15 라는 식이 나온다.

앞 15 * 60은 1분에 15번씩, 60분동안 을 표현한 식이고,

(60 - 15) * 15는 1시간에 15번은 60-15번만큼을 더 세어야 한다는 표현이다.

 

음, 아니면 더 간단히 이해하려면 이게 낫겠구나.

15 * (60 - 15) + 60 * 15 

60분 중 15분을 뺀 45분은 3이 포함되는 시간이 15번 나오고

60분 중 15분에는 3이 포함되는 시간이 60번 나온다. 

 

저자가 제공하는 풀이는 다음과 같다.

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)

총 경우의 수가 24 * 60 * 60 밖에 되지 않으므로 그냥 모든 경우를 탐색하는 방법을 사용하는 것이 가능하다고 하였다.

 

무슨 풀이든 다 좋은 것 같다. 내 풀이든, 저자의 풀이든. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함