문제
N번째 종말의 수(666이 들어가는 수) 찾기
Reference
https://hongcoding.tistory.com/108 ([백준] 1436 영화감독 숌 (Python 파이썬))
https://pearlluck.tistory.com/523 ([백준][python]1436.영화감독 숌 -완전탐색(브루트포스))
풀이
실로 골때리는데 해결방안이 정말 의외인 문제. 아니 농담 아니고 진짜 그렇다니까?
참고로 666 다음이 1666 2666 3666 4666 5666이니까 이 다음은 6666이 올 것 같은가? 놉. 6660 6661 6662… 중간에 순서가 꼬인다. 근데 그때까지 영화가 안 망할 수 있을까 예제에 187 500 나오던데 여기까지 찍기 전에 감독님 죽어요…
아무튼 처음에 시도했던 건 이거였다.
- 1부터 6660000(10000이 제일 큰 수)까지 중 666이 들어가는 수를
- 배열에 넣고
- 배열의 N-1번째 요소를 반환한다
그래서 이케 했지.
import sys
N = int(sys.stdin.readline())
terminate_list =[]
terminate_end = (666 * 10000) + 1
for i in range(1,terminate_end):
if str(i).find('666') != -1:
terminate_list.append(i)
print(terminate_list[N-1])
근데 IndexError가 날 반길 줄은 몰랐지. 그래서 방법을 찾아봤는데 어떻게 하느냐…
그냥 1부터 쭉 더해가면서 666이 들어가는 수를 찾으면 됨.
import sys
N = int(sys.stdin.readline())
count = 0
num = 1
while True:
if '666' in str(num):
count += 1
if count == N:
print(num)
break;
num += 1
농담 아니고 진짜다.
Reply