브루트 포스 (Brute Force)
컴퓨터 공학에서의 브루트 포스 알고리즘을 다룹니다.
완전탐색 알고리즘으로 많이 알려져 있습니다. 가능한 모든 경우의 수를 탐색하여 100% 정답을 도출하며, 무식하게(brute) 탐색하는 만큼 단점은 속도입니다.
백준 알고리즘: #1436 영화감독 숌
이 문제는
solved.ac
에서 silver5단계로 마크되어 있습니다.
문제
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번째 영화의 제목에 들어간 수를 출력한다.
풀이
6이 세 개 이상 연속해서 나오는 수는 666 앞에 자리만 바꿔서 될 게 아니라는 것을 명심합시다.
처음엔 규칙이 있으려니 하고 노트에 하나하나 다 적어보았는데요.. 그 나름의 규칙은 있었지만 N번째 숫자를 받아서 이걸 계산할 엄두가 나지 않았습니다.
그래서 브루트 포스의 정수(..)인 노가다로 구해보았습니다! (너무 간단해서 전체 코드에 주석으로 설명을 조금 붙여보았습니다.)
- 너무너무너무 간단함에도 이 포스팅을 하는 이유는 저도 이 방법까지 오는데는 시간을 좀 썼기 때문입니다.. 혹시 너무 답답하셔서 오신 분들은 이 방법 사용해 보세요!
전체 코드
N = int(input())
number = 666
while N:
if "666" in str(number):
N -= 1 # N번째 수를 구하면 루프 종료
number += 1 # 수를 1씩 늘려가며 루프 돌기 (666, 667, ...)
print(number - 1)
사담
역시 너무 간단하게 막 풀어서일까... 시간이 어마어마합니다.
지금은 실버단계라 시간도 널널해서 통과될지 모르겠지만, (일단 이런 문제가 나중에 나오긴 할까..)
좀 더 빨리 찾을 수 있는 방법이 있을지 저도 구글링해보러 가렵니다🤣🤣
'알고리즘 문제 풀이' 카테고리의 다른 글
백준 알고리즘(BOJ) #1018: 체스판 다시 칠하기 (0) | 2020.07.26 |
---|---|
백준 알고리즘(BOJ) #7568: 덩치 (0) | 2020.07.26 |
백준 알고리즘(BOJ) #11729: 하노이 탑 이동 순서 (2) | 2020.07.25 |