ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ 14381] 숫자세는 양 (Small)
    문제 풀이/Baekjoon Online Judge 2023. 1. 28. 02:27

    난이도

    체감 난이도: Silver IV + 0.1

     

    태그

    더보기
    • Simulation (시뮬레이션)
    • Brute Force (브루트 포스)

     

    풀이

    1. 불가능한 경우는?

    더보기

    예제에도 나와있듯이, 0은 불가능합니다.

    그런데 다른 수는 어떨까요?

     

    큰 수를 생각해보면, 최대 200씩만 더하다 보면 언젠가는 1000????, 2000????, ..., 9000???? 같은 게 나올 테니

    0을 제외하고는 항상 가능함을 알 수 있습니다.

     

    2. 나머지 경우는?

    더보기

    사실 그렇게 크게 가지 않아도 됩니다.

    어떤 수의 길이가 L이라면, (1번)과 같은 패턴이 L+1번째 숫자에서부터 나타나게 됩니다.

     

    예로, 187을 보면

    187, 374, 561, ..., 1122, 1309, ..., 2057, ..., 3179, ..., 9163, ..., 10098, ...

    의 방식으로 나타나게 됩니다.

     

    크게 잡아봐야 앞에 2자리가 더 붙는 정도니, 100번 정도 돌아가면 끝난다고 생각해볼 수 있습니다.

     

    코드

    더보기
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    bool chk[10];
     
    void Main(){
        int t; cin >> t;
        for (int tt = 1; tt <= t; tt++){
            cout << "Case #" << tt << ": ";
            int x; cin >> x;
            if (x == 0){ cout << "INSOMNIA" << endlcontinue; }
            int cnt = 0;
            memset(chk, 0sizeof(chk));
            for (int ans = 1; ; ans++){
                int a = x*ans; //cout << a << ' ';
                while (a){ if (!chk[a%10]){ cnt += 1; } chk[a%10= 1; a /= 10; }
                if (cnt == 10){ cout << x*ans << endlbreak; }
            }
        }
    }
    cs

    '문제 풀이 > Baekjoon Online Judge' 카테고리의 다른 글

    [BOJ 1905] 상자 쌓기  (0) 2023.01.28
    [BOJ 1709] 타일 위의 원  (0) 2023.01.28
    [BOJ 9982] Frogger's For Dinner  (1) 2023.01.28
    [BOJ 27245] Комната  (0) 2023.01.28
    [BOJ 11724] 연결 요소의 개수  (0) 2023.01.28
Designed by Tistory.