기초 PS #boj 1436

0ne·2024년 2월 2일

Algorithm

목록 보기
9/22

문제

종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.

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

입력

첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

풀이

[핵심아이디어]

  1. 문자열 변환!
  2. bruteforce : 숫자를 증가시키면서 '종말의 수'를 찾는 것
#include <iostream>
using namespace std;

#define FASTIO cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);

int find666(int N) {
    int i = 666;
    int count = 0;
    while (1) {
        string target = to_string(i);
        for (int j = 0; j < target.size() - 2; ++j) {
            if (target[j] == '6' && target[j+1] == '6' && target[j+2] == '6') {
                count++;
                if (count == N) {
                    return i;
                }
                break;
            }
        }
        i++;
    }
}


int main()
{
    FASTIO;

    int N; cin >> N; cout << find666(N);

}

profile
@Hanyang univ(seoul). CSE

0개의 댓글