본문 바로가기

Algorithm/Brute-force

[C++] 백준 1436번 : 영화감독 숌 (S5)

#문제

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

 

1436번: 영화감독 숌

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

www.acmicpc.net

#풀이

우선 특별한 풀이법을 생각하기보단 1부터 모든 수를 순서대로 살펴보면 되겠다고 생각하는 것이 중요하다.

그리고 처음 풀이에서 실수했던 것은 6이 3개 이상 존재해야 한다는 점에만 주목해서 연속으로 나타나야 한다는 점을 고려하지 못했다. 그래서 코드를 수정했는데, 이때는 6이 연속으로 3개 존재한다는 것이 확인만 되면 반복문을 탈출하도록 짰다. 연속으로 6이 3개 이상이기만 하면 되기 때문에 몇 개가 연속으로 있는지는 중요하지 않기 때문이다.

또한, [C++] 백준 2231번 : 분해합 (B2)에서 살펴보았던 수의 각 자리수에 접근하는 법도 이 문제에 사용되었다. 이러한 for문 구성에 익숙해지도록 하자(10으로 나눈 나머지를 구하고, 10으로 나눠서 다음 자릿수를 살핀다)

#소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;
 
int main(void
{
    int N;
    cin >> N;//N은 몇번째 영화인지
    int total = 0;//몇번째인지 센다
    int cnt = 0;//6의 개수를 센다
    int i = 666;
    while (total <= 10000) {
        cnt = 0;
        int res = i;
        int temp = i;
        while (temp != 0) {
            if (temp % 10 == 6) {
                cnt++;//연속으로 나타나고 있는 6의개수 증가
            }
            else {
                cnt = 0;//연속으로 나타나는게 끊기면
            }
            if (cnt == 3)//연속으로 3개존재하는게 확인되면
                break;
            temp /= 10;
        }
        if (cnt == 3)
            total++;
        if (total == N) {
            cout << res;
            break;
        }
        i++;
    }
    return 0;
}
cs