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)}')
'Online Judge > Baekjoon' 카테고리의 다른 글
[Baekjoon 31418] 스펀지 | Python (0) | 2024.10.01 |
---|---|
[Baekjoon 9414] 프로그래밍 대회 전용 부지 | Python (0) | 2024.09.19 |
[Baekjoon 10816] 숫자 카드 2 | Python (0) | 2024.09.03 |
[Baekjoon 12683] Test Passing Probability (Small) | Python (0) | 2024.08.31 |
[Baekjoon 3230] 금메달, 은메달, 동메달은 누가? | Python (0) | 2024.08.31 |