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

#문제

백준 1436번 영화감독 숌

#풀이

#include <iostream>
#include <string>

using namespace std;

int endNum[10001];

int main()
{
	ios::sync_with_stdio(false); cin.tie(NULL);

	int N;
	cin >> N;

	int iter = 1;
	int num = 666;

	while (iter <= N)
	{
		string toString = to_string(num);

		bool isEndNum = false;

		for (int i = 2; i < toString.size(); ++i)
		{
			if (toString[i] == '6' && toString[i - 1] == '6' && toString[i - 2] == '6')
			{
				isEndNum = true;
				break;
			}
		}

		if (isEndNum)
		{
			endNum[iter] = num;
			iter++;
		}

		num++;
	}

	cout << endNum[N];

	return 0;
}

#정리

문제를 이해하는데 한참 걸렸다. 666이 들어가는 숫자 중에 N번째로 작은 수를 찾는 문제. 1번째로 작은 수는 당연히 666, 2번째는 1666, 3번째는 2666 … 6번째는 5666, 7번째는 6660 … 이런식이다. 예제가 악질이다. 마땅한 점화식이 떠오르지 않아서 부르트포스로 풀었다. 입력받은 N만큼 반복문을 돌리면서 임의로 만든 endNum 배열에 666이 들어가는 수를 차례대로 N개 만큼 할당해주고, N번째 숫자를 출력하여 해결.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 2309번 일곱 난쟁이 / C++
  • [백준] 11656번 접미사 배열 / C++
  • [백준] 9613번 GCD 합 / C++
  • [백준] 1037번 최소공배수 / C++
  • [백준] 11005번 진법 변환2 / C++