백준/C++

[백준] 1436번: 영화감독 숌 | C++ 풀이

성실한 당근농부 2023. 6. 29. 23:43

# 문제

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

 

 


 

# 풀이

이번에도 역시 브루트포스 문제다.

바로 정답 소스코드 확인!

 

#include <iostream>
using namespace std;

bool checkSixNum(int n);

int main(){
    int n;
    cin >> n;
    int numbering = 666;
    int series = 1;
    bool numCheck;

    if(n == 1) cout << numbering;
    else{
        while(series < n){
            numbering++;
            numCheck = checkSixNum(numbering);
            if(numCheck) series++;
        }
        cout << numbering;
    }
    return 0;
}

// 세개 이상만 연속되면 됨
bool checkSixNum(int n) {
    int cnt = 0;
    while (n > 0) {
        if (n%10 == 6) {
            cnt++;
            if (cnt == 3) return true;
        } else cnt = 0;
        n /= 10;
    }
    return false;
}

main 함수에 들어가기 앞서 종말의 수인지 체크해주는 checkSixNum이라는 함수를 먼저 구현해주었다.

 

 

 

bool checkSixNum(int n) {
    int cnt = 0;
    while (n > 0) {
        if (n%10 == 6) {
            cnt++;
            if (cnt == 3) return true;
        } else cnt = 0;
        n /= 10;
    }
    return false;
}

종말의 수는 6이 적어도 3개 이상 연속으로 들어가는 수이므로 6의 개수를 셀 cnt 변수를 만들어준 후 while문을 돌며 판단해준다.

만약 n%10이 6이라면 cnt를 하나 증가시키고, 이 cnt가 3이라면 true를 반환한다. 사실 종말의 수의 정의대로라면 cnt가 3보다 크거나 같을 때 true를 반환해야 하지만 해당 코드에서는 적어도 3개 이상이면 종말의 수임이 확인되므로 3일 경우에 true를 반환해주었다.

만약 n%10이 6이 아니라면 cnt 변수를 다시 0으로 초기화 해준다. 이것으로 연속된 6 여부 판단 가능

그리고 n을 10으로 나눠주며 과정을 반복해주면 된다. 모든 탐색 후 종말의 수가 아닌 것이 확인될 경우 false를 반환하면 종말의 수 확인 함수는 구현이 끝났다.

 

 

 

int n;
cin >> n;
int numbering = 666;
int series = 1;
bool numCheck;

main 함수로 들어와 n을 입력받은 후, 가장 작은 종말의 수인 666을 영화 numbering 변수에 담아준다.

시리즈를 세어줄 series 변수도 1로 생성 및 초기화를 하고, 마지막으로 앞서 만든 checkSixNum 함수의 결과값을 받아올 bool 타입 numCheck 변수도 만들면 준비 끝!

 

 

 

if(n == 1) cout << numbering;
else{
    while(series < n){
        numbering++;
        numCheck = checkSixNum(numbering);
        if(numCheck) series++;
    }
    cout << numbering;
}

만약 입력받은 n이 1이라면 가장 작은 종말의 수인 666을 출력해주면 된다. 따라서 numbering 변수를 그대로 출력!

아니라면 while문을 돌며 하나씩 체크해주면 되는데 numbering을 하나씩 증가시키며 종말의 수인지 확인해준다.

종말의 수가 맞다면 series를 하나 증가시켜주고, 이 과정을 series와 n이 같아질 때까지 반복한다.

series와 n이 같아졌다면 while문을 탈출하게 되는데 그때의 numbering이 우리가 찾는 종말의 수이다.

이를 출력해보면 정답임을 확인할 수 있다.

 

 

 

 

 

 


 

 

 

1436번: 영화감독 숌

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

www.acmicpc.net

728x90