코딩 테스트(Coding Test)/백준

[백준] 1436번: 영화감독 숌 - 파이썬(Python)

잇트루 2022. 8. 16. 10:00
반응형

문제 링크

https://www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타

www.acmicpc.net

 

문제

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.

 

하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 숫자란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.

 

따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말(N번째로 작은 종말의 숫자)과 같다.

 

숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

 

입력

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

 

출력

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

 

예제 입출력

입력1

2

출력1

1666

 

입력2

187

출력2

66666

 

입력3

500

출력3

166699

 

문제 풀이 및 코드

문제를 간단히 요약하면 666이 들어가는 N번째 큰 수를 찾는 것입니다. 주의해야 할 점은 666, 1666, 2666, 3666, ... 형태로 증가 하지만 5666 다음으로 큰 수들은 6660, 6661, 6662, ... 형태로 증가하게 됩니다.

 

따라서 666을 포함하여 왼쪽이 증가하는 경우와 오른쪽이 증가하는 경우가 있으나, 코드가 매우 복잡해지고 풀이가 어려울 수 있습니다. 따라서 문제가 의도하는 방식인 브루트 포스(Brute Force) 방법을 사용합니다.

 

브루트 포스 알고리즘은 완전 탐색 알고리즘 종류 중 하나입니다. 브루트 포스는 가능한 모든 수를 조합하는 방식으로 가장 원시적인 방법이기도 합니다. 예를 들어 4자리 숫자로 이루어진 비밀번호를 찾는 경우 0000부터 9999까지 모든 수를 입력하여 비밀번호를 찾는 것입니다.

 

따라서 숫자를 셀 카운트 변수와 초기값 666을 설정한 결괏값 변수를 선언한 뒤 반복문을 사용합니다. 결괏값을 도출해내기까지 몇 번을 반복해야 할지 알기 어렵기 때문에 while문을 사용하였습니다.

반복문 안에는 조건문을 통해 result 값에 '666'이 포함하는지를 판단하여 '666'이 포함되어 있을 경우 cnt 변수를 1씩 증가시킵니다.

result 값을 1씩 증가시켜 cnt의 수가 n이 될 때까지 반복한 뒤 while문을 빠져나오도록 한 뒤 result를 출력하는 것으로 문제를 풀 수 있습니다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
= int(input())
cnt = 0
result = 666
 
while True:
    if '666' in str(result):
        cnt += 1
 
    if cnt == n:
        break
 
    result += 1
 
print(result)
cs

본 코드는 제가 직접 작성한 것으로 더 나은 코드가 존재할 수 있으니 참고하시기 바랍니다.

반응형