[C언어] 백준 1436 : 영화감독 숌

mainsain·2022년 3월 17일
0

백준

목록 보기
17/64

내가 생각한 방법

  1. 666, 1666, 2666, 3666, ... 이런식으로 직접 세봤는데, 규칙이 안나왔다.

  2. 그래서 생각한게 브루트 포스에 맞게 665부터 무한루프를 돌리는 방법이다.

  3. 우리가 찾는 건 '666' 3번 연속하는 '6'이다. 처음에 문자열로 바꾸고 strstr을 활용해볼까 생각했지만, 아닌 것 같아서 돌렸다.

  4. 그렇게 생각한게 666을 찾았다고 가정하고, count하나씩 세준다. 666 발견 -> count++, if(n(입력값) == count) i출력 후 리턴.

  5. 그럼 이제 666을 찾아야한다. 문자열로 바꿀 생각이 없기에 각 자리숫자를 하나하나 체크한다. 1266612 로 가정해보자. 저 숫자를 t,s로 각각 저장하고, 반복문으로 돌리면서 666을 찾는다.

  6. 끝난 줄 알았지만, 내 코드에서 문제를 발견했다. 다 정상적으로 작동하는데 6666처럼 6이 4개 이상이면, 각 자리마다 6인지 체크하는 반복문을 한 번 더 돌아가게 된다. 그래서 6이 4개 이상이면, i++로 예외처리를 진행했다.

내가 푼 풀이

#include <stdio.h>

int main()
{
    int i, t, s, n, t1;
    int count = 0;
    scanf("%d", &n);
    i = 665;
    while (1)
    {
        t = i;
        s = i;
        while (s > 0)
        {
            t = s % 10;
            if (t == 6) // 6이 한 번
            {
                t = s / 10 % 10;
                if (t == 6) // 6이 두 번
                {
                    t = s / 100 % 10;
                    if (t == 6) // 6이 세 번
                    {
                        t1 = s / 1000 % 10; // 6이 네 번일경우 체크
                        count++;
                        if (n == count) // count와 n이 같으면 출력.
                        {
                            printf("%d", i);
                            return 0;
                        }
                    }
                }
            }
            if (t1 == 6) // 4번이면 i++하고 그냥 한 번 더 돌아가라고 내비둠
            i++;
            s = s / 10;
        }
        i++;
    }
}

다른 사람 풀이

#include <stdio.h>

int i, temp, check, cnt = 1;
int main(void)
{
    int series;
    scanf("%d", &series);
    if (series == 1)
    {
        printf("666");
        return 0;
    }
    for (i = 667;; i++)
    {
        temp = i;
        check = 0;
        while (temp)
        {
            if (temp % 1000 == 666)
            {
                check = 1;
            }
            temp /= 10;
        }
        if (check)
        {
            cnt++;
            if (cnt == series)
            {
                break;
            }
        }
    }
    printf("%d\n", i);
    return 0;
}

나처럼 하나씩 6을 세지 않고, %1000으로 한 번에 해버렸다.
기억하고 가자.

profile
새로운 자극을 주세요.

0개의 댓글