N
: 찾으려는 종말의 수의 순서 (1 ≤ N
≤ 10,000)
✅ 입력 조건
1. N 입력
✅ 출력 조건
1. N번째 종말의 수 출력
6이 연속으로 3개 들어간 숫자들 중 N번째 숫자를 찾는 문제이다.
문자열에서 원하는 문자를 찾는 방식으로 구현하면 된다.
숫자를 하나씩 증가시켜가면서, 그 숫자에 666
이 있는지 확인하고 있다면 1
을 더해주면서 N
이 될 때까지 이 과정을 반복해주면 된다.
입력받기 →
문자열 변환 →
666 있는지 찾기 →
while 루프 반복 →
최종 시간복잡도
으로 제한 시간 내에 연산이 가능하다.
브루트포스 방식으로 N번째 수를 찾을 때까지 하나하나 확인한다.
### Before
for i in range(666, 10001):
str_i = str(i)
if '666' in str_i:
count += 1
if count == N:
print(i)
break
### After
i = 666
while True:
str_i = str(i)
if '666' in str_i:
count += 1
if count == N:
print(i)
break
i += 1
N
의 조건에 따라 for문
으로 i
에 직접 잘못된 범위 제한을 두었다. N
은 몇 번째인지를 의미하는 것이므로 N
번째 숫자는 10,000
을 가뿐히 넘을 수 있는 숫자인데 그 부분을 착각했다.while문
으로 N
번째 숫자를 찾을 때까지 i
를 계속 증가시키는 방식으로 변경하였다.import sys
input = sys.stdin.readline
# 1. N 입력
N = int(input())
# 2. 몇 번째인지 셀 변수 정의
count = 0
# 3. 666부터 세도록 변수 정의
i = 666
# 4. while문으로 종말의 수 찾기
while True:
# 4-1. 숫자를 문자열로 캐스팅해 666 있는지 찾기
str_i = str(i)
# 4-2. 666이 있다면 count 증가
if '666' in str_i:
count += 1
# 4-3. count가 N과 동일하면 출력하고 while 종료
if count == N:
print(i)
break
# 4-4. 종료되지 않았다면 숫자 증가
i += 1
import sys
input = sys.stdin.readline
# 1. N 입력
N = int(input())
# 2. 찾으려는 수
movie = 666
# 3. N이 0이 될 때까지 반복
while N:
# 3-1. 666 있으면 N 감소
if "666" in str(movie):
N -= 1
# 3-2. 숫자 증가
movie += 1
# 4. 결과 출력 (마지막에 movie를 하나 증가시키므로 빼주기)
print(movie - 1)
N
을 찾을 때까지 N
을 감소시켜가며 브루트포스로 찾는 방법이다.