Python3
문제
https://www.acmicpc.net/problem/1436
키워드
- 브루트포스
=> 브루트포스(brute: 무식한, force: 힘)
완전탐색 알고리즘. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다.
문제 풀이
문제 요구사항
- 종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수이다 (666, 1666, 2666, ...)
- N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.
- 숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램
변수 및 함수 설명
- n : n번 째 영화의 제목 (10,000보다 작거나 같은 자연수)
- six : 첫 종말의 수 (666)
- cnt : 666이 포함된 수를 카운트하는 변수
풀이
666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, 6662, ⋯, 6669, 7666, 8666, 9666, ⋯
처음에는 666을 기준으로 맨 앞자리만 바뀌다가 5666 다음 큰 수는 6666이 아니라 6660부터 시작한다.
따라서 계속 하나씩 수를 늘려가다가 666이 포함된 수면 카운트하고 아니면 지나간다.
(입력 및 선언)
- n번 째 수를 입력 받는다
- 첫 종말의 수인 666을 six 변수 안에 넣는다.
- 666이 포함된 수를 카운트할 cnt를 선언한다.
(무한 반복문)
- 만약 문자 '666'이 문자 six 안에 포함되어 있다면,
- 카운팅한다(cnt++)
- 이때 만약 cnt 값이 찾는 n이라면, six 값을 출력하고 반복문을 빠져 나온다.
- 포함되어 있지 않으면 계속 six 값을 1씩 증가시킨다.
six는 정수형으로 입력 받아서 1씩 늘려가며 값을 변화시킨다.
한편 666이 있는지 판단할 때는 문자형을 활용하는 것이 편하다.
최종 코드
n = int(input())
six = 666
cnt = 0
while True :
if '666' in str(six) :
cnt += 1
if cnt == n :
print(six)
break
six += 1