백준/c

백준_1436_영화감독숌

S0LL 2024. 5. 3. 22:29

 

 

666이 포함된 숫자를 작은 순으로 나열하는 문제입니다.

 

이런 문제에는 두가지 선택지가 있습니다.

1. 규칙을 찾아서 풀 것인가.

2. 하나하나 나열해서 풀 것인가.

 

우선 규칙이 있나 찾아보기 위해 작은 수부터 나열해보겠습니다.

더보기

666

 

1666    2666    3666    4666    5666 

 

6660    6661    6662    6663    6664    6665    6666    6667    6668    6669

 

7666    8666    9666    10666    11666    12666    13666    14666    15666

 

16660    16661    16662    16663    16664    16665    16666    16667    16668    16669

 

17666    18666    19666    20666    21666    22666    23666    24666    25666

 

                                                                 .

                                                                .

                                                                 .

규칙이 보이시나요?

 

제가 찾은 규칙은 이렇습니다.

 

색칠한 부분의 경우,

666 앞의 수의 일의 자리가 7, 8, 9, 10, 1, 2, 3,4, 5 를 벗어나면 색칠하지 않은 부분으로 넘어갑니다.

 

색칠하지 않은 부분의 경우, 

666 앞의 숫자가 1씩 커지면서, 1의자리수가 1~9를 반복하고 있습니다.

 

여기서, 규칙을 사용하여 문제를 푸는 것보다 숫자를 늘리며 666이 들어갔는지 확인하며 푸는 것이 나을 것 같아

 

규칙을 사용하지 않기로 결정하였습니다.

 

 

 

풀이 방식)

 

1. n을 입력받아서 666부터 666이 들어가는 숫자를 작은 순서대로 n-1개 구합니다.

 

2. 숫자를 하나 구할 때마다 count 라는 변수를 1 증가시켜줍니다.

 

3. count 변수가 n-1 이 되었을 때, 반복문을 탈출하고 그 숫자를 출력합니다.

 

 

코드로 보시면 쉽게 이해하실 수 있습니다.

 

 

전체 코드)

#include <stdio.h>
#include <string.h>

int main(void)
{
    int n;
    scanf("%d", &n);

    int num = 666;    //영화제목 초기상태
    char check[100000] = {0};    //num을 문자열로 변환시켜 담을 배열

    int count = 0;    //666이 들어간 숫자의 개수를 파악하기 위한 변수
    while (1)
    {
        if (n == 1)    //1번째 영화제목은 연산할필요없이 바로 출력
        {
            break;
        }
        num++;
        sprintf(check, "%d", num);    //영화제목을 1증가시키고 문자열로 변환

        const char *temp = strstr(check, "666");    //문자열 내에 666이 있는지 판별

        if (temp != NULL)    //666이 있으면 count를 증가
        {
            count++;
        }

        if (count == n - 1)   //count가 n-1에 도달하면 반복문 종료
        {
            break;
        }
    }
    printf("%d\n", num);

    return 0;
}

 

'백준 > c' 카테고리의 다른 글

백준_10773_제로_(stack)  (0) 2024.05.05
백준_1676_팩토리얼0의개수  (0) 2024.05.04
백준_10989_수정렬하기3(counting sort)  (0) 2024.05.03
백준_2903_중앙이동알고리즘  (2) 2024.05.03
백준_1934_최소공배수  (0) 2024.05.01