티스토리 뷰

📚 문제

입력

  • 첫 번째 행은 케이스의 개수, T이다. 다음 행부터는 T개의 케이스들이 나온다. 각 케이스는 블리트릭스가 고른 하나의 숫자 N으로 구성된다.
  • 제한
    • 1 ≤ T ≤ 100.
    • 0 ≤ N ≤ 10^6.

출력

  • 각 케이스에 대해서, 케이스 번호가 x이고 y가 정답일 때, Case #x: y라고 출력해야 한다.

입력 예시

5
0
1
2
11
1692

출력 예시

Case #1: INSOMNIA
Case #2: 10
Case #3: 90
Case #4: 110
Case #5: 5076

힌트

  • 예제 입출력 1번에 대해서, 2 × 0 = 0, 3 × 0 = 0 등등으로 이어지므로, 블리트릭스는 0외에는 다른 숫자를 기록할 수 없을 것이며, 따라서 영원히 잠에 들 수 없다.
  • 예제 입출력 2번의 경우, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 순으로 떠올릴 것이며, 0이 가장 마지막에 기록되는 수가 될 것이다. 따라서 10이 마지막 수가 될 것이다.
  • 예제 입출력 3번의 경우, 2, 4, 6... 등등으로 떠올릴 것이다. 숫자 9는 90 전에는 기록할 수 없다. 90을 떠올렸을 때 이미 블리트릭스는 0~8의 숫자를 적었을 것이므로, 90이 마지막 수가 될 것이다.
  • 예제 입출력 4번은 블리트릭스가 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 을 떠올릴 것이고, 110이 마지막 수가 될 것이다.
  • 예제 입출력 5번은 문제에서 설명한 수이다.

🧑🏻‍💻 풀이 과정

  • 0은 무조건 INSOMNIA이라고 봐야한다. 입력받자마자 cut하자
  • n은 최대 10의 6제곱이므로, whilen10,000,000이하일 동안만 반복하자.
  • while 시작마다 0~9 까지의 값이 저장되었는지 확인해서 break
  • 새로운 숫자를 모을 때 마다 0~9 값이 모두 모였는지 확인하고, print
def print_success(arr, num, i):
    if sum(list(map(int, arr))) >= 45 and '0' in arr:
        print('Case #' + str(i + 1) + ': ' + str(num))


def sum_break(arr):
    return sum(list(map(int, arr))) >= 45 and '0' in arr


t = int(input())

for i in range(t):
    n = int(input())

    if n == 0:
        print('Case #' + str(i + 1) + ': INSOMNIA')
        continue

    numbers = []
    d = 1
    while n <= 10000000:
        if sum_break(numbers):
            break

        squares = n
        squares *= d
        for number in str(squares):
            if number not in numbers:
                numbers.append(number)
                print_success(numbers, squares, i)

        d += 1
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함