https://www.acmicpc.net/problem/14381


문제

 

각 테스트 케이스에 대해 입력을 받고, 주어진 규칙에 따라 숫자를 기록한 후, 조건에 부합하면 해당 숫자를 출력하는 문제이다.

주어진 규칙은 주어진 수를 1, 2, 3 으로 곱해나가면서 각 자리 수에 있는 숫자를 기록하는 것이고, 조건은 그렇게 기록된 숫자가 0 부터 9 까지 있을 때 이다. 

 


풀이

 

입력을 받고, 1 부터 시작해서 계속 곱해나가며 각 자리 수에 있는 숫자를 기록하면 된다. 단 입력으로 0 이 들어오게 되면 무엇을 곱해도 0 이 되어 0 부터 9 까지 수를 기록할 수 없으므로 조건에 따라 INSOMNIA 을 출력한다.

기록할 때는 set 을 이용하여 집계하면 편할 것 같아 set 을 사용하면 좋을 듯 하다. 0 부터 9 까지 수를 모두 기록하면 모두 10 개 이니 조건을 set 이 10 개 이하일 때 계속 숫자를 확인하도록 하면 된다. set 을 사용하지 않고, 리스트를 사용하여 인덱스를 통해 접근 후 해당 값에 true, false 를 넣어 확인할 수도 있겠다.

이 문제의 경우 주어지는 숫자가 작기 때문에 파이썬을 사용하면서 단순한 구조로 짜도 충분히 제한 시간 내에 들어올 수 있다.

출력할 때는 f-string을 사용하여 case 에 맞는 출력문을 출력하면 된다.

 


코드

 

test = int(input())
for i in range(1, test+1):
    n = int(input())
    if n == 0:
        print(f'Case #{i}: INSOMNIA')
        continue
    num_set = set()
    j = 1
    while len(num_set) < 10:
        temp = n * j
        while temp != 0:
            num_set.add(temp%10)
            temp //= 10
        j += 1
    print(f'Case #{i}: {n*(j-1)}')

 

애스터로이드