알고리즘/백준

백준_1436 : 영화감독 숌 - C++

맏리믓 2023. 5. 19. 15:43

문제


문제 해석

- 간단히 줄이면 숫자 순서대로 나열 했을때 6이 최소한 3개 이상 연속된 숫자를 찾는다.

- 이 숫자 중 원하는 번째 에 있는 수를 출력하는 문제이다.


알고리즘

- 제한 시간도 넉넉 하기 때문에 숫자를 처음부터 계쏙 올려가면서 찾아도 된다.

- 6 세개가 연속된 가장 작은 수는 '666' 이기 때문에 여기서 부터 시작 하면 된다.

- 즉 '666' 부터 1씩 증가 시키면서 해당 수를 string 으로 전환 하고 이 string 에 6이 연속된 수가 있는지만 확인 하면 된다.


코드

 

#include <iostream>
#include <string>
using namespace std;

int N = 0;

bool find_three_six(string a){
    bool result = false;
    int cnt = 0;
    for(int i = 0; i < a.length(); i++){
        if(a[i] == '6'){
            cnt += 1;
        } else {
            cnt = 0;
        }

        if(cnt >= 3){
            result = true;
            break;
        } 
    }
    return result;
}

int main(){
    int input;
    cin >> input;

    for(int i = 666; ;i++){
        string i_to_s = to_string(i);
        if(find_three_six(i_to_s)){
            N += 1;
        }
        if(N == input) {
            cout << i << '\n';
            break;
        } 
    }

    return 0;
}