[C++] 백준 1436번 영화감독 숌

xyzw·2025년 2월 7일
0

algorithm

목록 보기
14/61

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

#include <iostream>
using namespace std;

int main()
{
    int n;
    int cnt = 0, ans = 665;
    
    cin >> n;
    
    while(cnt != n){
        ans++;
        int temp = ans;
        while(temp >= 666){
            if(temp % 1000 == 666) {
                cnt++;
                break;
            } else {
                temp /= 10;
            }
        }
    }
    
    cout << ans;
    return 0;
}

풀이

6이 3개 이상 연속으로 들어간 수를 만들어내는 것은 어렵다.

대신 666부터 자연수 하나하나를 6이 3개 이상 들어간 수인지 확인하는 것이 쉽다.

따라서 어떤 자연수를 1000으로 나누었을 때 나머지가 666이라면 cnt를 증가시켜 해당 수가 cnt번째로 작은 종말의 수로 설정한다.
그런데 166699처럼 1000으로 나누어도 나머지가 666이 되지 않는 수의 경우를 생각해야 하므로, 필요없는 자리의 수들을 지우기 위해 10으로 나눠준다.

0개의 댓글