[ 백준 ] 1436 / 영화감독 숌

金弘均·2021년 9월 15일
0

Baekjoon Online Judge

목록 보기
119/228
post-thumbnail

# Appreciation

/*
 * Problem :: 1436 / 영화감독 숌
 *
 * Kind :: Brute Force
 *
 * Insight
 * - N 번째 영화 제목 숫자를 한 번에 출력해주는 알고리즘을 만들고 싶었는데...
 *   66600, 366600 과 같은 경우를 다루기가 어려웠다
 *   + 그래서 그냥 다 해보기로 했다
 *     # max(N) 인 10000 을 넣어보고 결과를 확인해보면서
 *       시간 제한을 넘는지 그렇지 않은지 알아보자
 *       -> N = 10000 일 때, 제목의 숫자가 2666799 이므로 충분히 가능하다
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
bool is666(int n);


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N; cin >> N;

    // Process
    int n = 0; /* 현재 탐색하고 있는 수 */
    int cnt = 0; /* 현재까지 탐색한 수들 중 만난 종말의 숫자 개수 */
    while (cnt < N) {
        n++;
        if (is666(n)) cnt++;
    }

    // Control : Output
    cout << n << endl;
}

// Helper Functions
bool is666(int n)
/* 이 숫자가 종말의 숫자면 true 를 반환, 그 외 false 를 반환 */
{
    int cnt = 0; /* 연속으로 나오는 숫자 6 카운트 */
    while (n) {
        if (n % 10 == 6) { /* 현재 일의 자리 숫자가 6이면 */
            cnt++; /* 카운트를 하나 늘림 */
            if (cnt == 3) { /* 연속으로 6이 세번 나왔으면 */
                return true; /* 이 숫자는 종말의 숫자임 */
            }
        } else {
            cnt = 0; /* 연속이 끊김, 카운트를 0으로 초기화 */
        } n /= 10; /* 10으로 나눈 몫으로 숫자 갱신
                    * 즉 위 알고리즘은, 숫자의 맨 뒷자리부터
                    * 6이 3번 연속으로 나오는지를 검사하는 것임 */
    } return false;
}
profile
이런 미친 게임을 봤나! - 옥냥이

0개의 댓글