[Codeforces 1326A] Bad Ugly Numbers

Mar 19, 2020


[Codeforces 1326A] Bad Ugly Numbers

문제 요약

양의 정수 n이 주어졌을 때, 각 자릿수로 나누어 떨어지지 않고, n개의 자릿수를 갖는 양의 정수를 구하는 문제

풀이

n의 범위가 100000까지므로 일반적인 정수를 구해 자릿수로 나누어 떨어지지 않는지 확인하는 방법으로는 한계가 있음을 알 수 있다.
문제의 조건에 해당하는 숫자를 만드는 방법에는 여러 가지가 있겠지만, 내가 생각한 방법은 첫 번째 자리에 2를 넣고 나머지 자릿수에 3을 넣는 방법이다.
내 아이디어는 3의 배수 중에 3으로 끝나는 것은 11, 21, 31 … 일의 자리가 1로 끝나는 수의 배수일 경우 밖에 없다는 사실과 맨 앞자리에 2를 넣음으로써 3으로 나누어 떨어지지 않게 할 수 있다는 사실에 기반하였다. 끝자리가 3으로 끝나는 홀수는 2로 당연히 나누어 떨어지지 않는다.
예외 처리로는 n이 1일 경우, 모든 한 자리 숫자가 자기 자신으로 나누어 떨어지므로 -1을 출력해야 한다.

코드

#include <iostream>
int T, N;
int main() {
    for (scanf("%d", &T); T--;) {
        scanf("%d", &N);
        if (N == 1) puts("-1");
        else {
            printf("2");
            for (int i = 0; i < N - 1; i++) printf("3");
            puts("");
        }
    }
    return 0;
}