CS Student’s SAP&Tech Journey✨

[백준] 1436번: 영화감독 숌 본문

알고리즘/백준 | 프로그래머스

[백준] 1436번: 영화감독 숌

인포마틱 2024. 11. 9. 15:16

1. 백준 1436번 영화감독 숌

백준 1436번: 영화감독 숌 

 

 

2. 오늘의 회고

 

0. 문제 분석

종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.

 

: 처음에는 앞뒤로 숫자를 더하면서 붙여야 하는지 해결 방법이 보이지 않았다. 입력 범위를 보고 브루트포스로 해결해도 된다는 생각을 한 후 문제를 풀 수 있었다. 

 

브루트 포스 알고리즘은 시간과 자원이 엄청나게 들어서 얼핏 보면 무식하고 비효율적이라고 생각할 수도 있겠지만, 정확도 100%를 보장한다는 점에서 강력한 알고리즘이다. 예를 들어 4자리의 비밀번호를 찾아야 한다고 했을때, 0000부터 9999까지 수를 높여가며 찾았을 때 내가 원하는 수를 찾을 수 있다. 

 

1. 입력

첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

 

: 입력 범위를 보니, 브루트포스를 해도 무리가 아닌 범위이다.

 

2. 출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

 

3. 문제 접근

단순하게 666부터 시작하여 1씩 더하면서 그 숫자에 666이 나오면 카운트하는걸 반복한다. 주어진 입력N과 같아지면 그 값이 영화의 제목 숫자가 된다. 따라서 브루트 포스로 반복문을 구현해야 하는 문제이다.

 

end는 666부터 시작하여 1씩 더해간다. 더해가는 숫자에 666이 나오면 cnt에 카운트 후 cnt가 입력n과 같을 시 break. 

n = int(input())
end = 666
cnt = 0

while True:
    if '666' in str(end):
        cnt = cnt+1
        if cnt==n:
            print(end)
            break
    end = end+1