■ 문제
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오.
예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.
- 00시 00분 03초
- 00시 13분 30초
반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다.
- 00시 02분 55초
- 01시 27분 45초
■ 소스코드
# 1
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)
# 2
n = int(input())
count = 0
def check(i, j, k):
if i % 10 == 3 or j // 10 == 3 or j % 10 == 3 or k // 10 == 3 or k % 10 == 3 :
return True
else :
return False
for i in range(n + 1):
for j in range(60):
for k in range(60):
if check(i, j, k):
count += 1
print(count)
■ 풀이
완전탐색 유형
가능한 모든 시각의 경우를 하나씩 모두 세서 풀 수 있는 문제
# 1
시/분/초를 각각 loop으로 돌게하고 시,분,초 모두 구성을 문자열로 바꾼 후 문자열 '3'이 있는지 체크하고 있다면 카운트를 증가시킨다.
# 2
nested loop은 동일하지만 function을 새로 선언하고 시,분,초를 10으로 나눈 몫 or 10으로 나눈 나머지가 3이 있는지 체크하고 있다면 True 를 리턴하도록 했다. (시는 23시까지만 체크하면 되므로 "hour / / 10"은 넣지 않았다.) 반복문 안에서 리턴값을 체크한 후 카운트를 증가시킨다.
1번과 2번 중 실행시간은 2번이 더 빨랐다.
(아래 더보기에 실행에 걸린 시간 작성해놓음)
더보기
[실행시간 비교]
입력값 5인 경우
# 1 -> 0.025252초
# 2 -> 0.011674초
입력값 10인 경우
# 1 -> 0.040896초
# 2 -> 0.021954초
'알고리즘' 카테고리의 다른 글
[데알] 프로그래머스 알고리즘 Lesson.68935 3진법 뒤집기 (Java) (0) | 2020.11.18 |
---|---|
[데알] 프로그래머스 알고리즘 Lesson.42576 완주하지 못한 선수 (Java) (0) | 2020.11.17 |
[데알] 프로그래머스 알고리즘 Lesson.68644 두 개 뽑아서 더하기 (Java) (0) | 2020.11.16 |
[데알] 백준 알고리즘 No. 2577 숫자의 개수 (Python) (0) | 2020.11.15 |
[데알] 백준 알고리즘 No. 11654 아스키코드(Python) (0) | 2020.11.14 |
댓글