Posts [백준] 1436번 - 영화감독 숌
Post
Cancel

[백준] 1436번 - 영화감독 숌


백준 온라인 저지의 1436번 영화감독 숌 문제입니다.

[링크] https://www.acmicpc.net/problem/1436


문제 조건과 설명

  • 종말의 숫자란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말합니다.
  • 이 종말의 숫자 가지고 영화 제목을 만드는데,
    • 첫번째 영화 제목은 세상의 종말 666
    • 두번째 영화 제목은 세상의 종말 1666
    • 세번째 영화 제목은 세상의 종말 2666 … 이렇게 만들 것입니다.
  • 다시 쉽게 말하자면 적어도 6이 연속 3번 나오는 숫자들을 크기 순서대로 배열했을 때,
    • 입력값이 2이면 2번째의 숫자를 출력합니다. - 1666
    • 입력값이 3이면 3번째의 숫자를 출력합니다. - 2666
    • 즉, 666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, 6662, … 가 될 것입니다.
    • 예를 들어, 첫 번째 영화 제목에 들어간 수를 출력하라고 하면 666 이 될 것입니다.

Input

첫째 줄에 N이 주어집니다. (N은 10000 보다 작거나 같은 자연수)


Output

N번째 영화의 제목에 들어간 수를 출력합니다.


생각한 아이디어

최소 666부터 시작해서, 숫자를 1씩 증가시키면서 매번 종말의 숫자인지 아닌지 판단하고자 했습니다.

종말의 숫자인지 판단하는 법은 각 자릿수가 연속 3회 이상 6인지 보는 것입니다.

그러려면 숫자를 나누기 10 및 mod 10 연산을 적절히 활용해서 보면 될 것이라 생각했습니다.


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

	int n, temp=0, idx = 1, count = 0;
	int tempB=0;
	int main = 666;
	int cycle = 666;
	scanf("%d", &n);

	while (1) {
		
		if (n == 1)
		{
			printf("%d", main);
			break;
		}
		else {
			cycle = cycle + 1; // 반복문에서 계속 1씩 증가하는 숫자
			main = cycle; // 숫자를 임시 저장해 둘 main 변수

			while (main > 0) {
				tempB = main % 10; // 맨 끝자리부터 파악
				if (tempB == 6) {
					count++;
					main = main / 10; // 그 다음 자릿수 파악을 위한 나누기 10 연산
				}
				else if (count < 3){ // 3회 연속 나오지 않았을 때
					main = main / 10;
					count = 0;
				}
				else if (count >= 3) { // 3회 연속 나왔을 때
					main = main / 10;
				}
			}

			if (count >= 3) // 3회 이상 연속으로 6이 나왔을 경우
				idx = idx + 1; // n번째 영화 제목의 인덱스로 매칭
			
			count = 0;
			
			if (idx == n) { // 즉, n이 idx와 같다면
				printf("%d", cycle); // 숫자 출력 후 종료
				break;
			}
		}

	}

}