[SWEA 1288] 새로운 불면증 치료법

업데이트:

🦥 새로운 불면증 치료법

문제

호석이는 불면증에 걸렸다. 그래서 잠이 안 올 때의 민간요법 중 하나인 양 세기를 하려고 한다.

호석이는 1번 양부터 순서대로 세는 것이 재미없을 것 같아서 N의 배수 번호인 양을 세기로 하였다.

즉, 첫 번째에는 N번 양을 세고, 두 번째에는 2N번 양, … , k번째에는 kN번 양을 센다.

이렇게 숫자를 세던 호석이에게 잠은 더 오지 않고 다음과 같은 궁금증이 생겼다.

이전에 셌던 번호들의 각 자리수에서 0에서 9까지의 모든 숫자를 보는 것은 최소 몇 번 양을 센 시점일까?

예를 들어 N = 1295이라고 하자.

첫 번째로 N = 1295번 양을 센다. 현재 본 숫자는 1, 2, 5, 9이다.

두 번째로 2N = 2590번 양을 센다. 현재 본 숫자는 0, 2, 5, 9이다.

현재까지 본 숫자는 0, 1, 2, 5, 9이다.

세 번째로 3N = 3885번 양을 센다. 현재 본 숫자는 3, 5, 8이다.

현재까지 본 숫자는 0, 1, 2, 3, 5, 8, 9이다.

네 번째로 4N = 5180번 양을 센다. 현재 본 숫자는 0, 1, 5, 8이다.

현재까지 본 숫자는 0, 1, 2, 3, 5, 8, 9이다.

다섯 번째로 5N = 6475번 양을 센다. 현재 본 숫자는 4, 5, 6, 7이다.

현재까지 본 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9이다.

5N번 양을 세면 0에서 9까지 모든 숫자를 보게 되므로 호석이는 양 세기를 멈춘다.

출처 : 문제 링크

입력/출력

  • 입력
    • 첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
    • 각 테스트 케이스의 첫 번째 줄에는 N (1 ≤ N ≤ 106)이 주어진다.
  • 출력
    • 각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
    • 최소 몇 번 양을 세었을 때 이전에 봤던 숫자들의 자릿수에서 0에서 9까지의 모든 숫자를 보게 되는지 출력한다.
      ( 호석이는 xN번 양을 세고 있다. )
  • 입출력 예제 입출력 예제

풀이

🔎 아이디어

  • set() → 집합 함수 사용하기
  • k*N의 경우(k = 1, 2, 3, …)
    증가할 데이터 = 원본 데이터 * count
  • 문제 끝까지 잘읽기 → 입출력 확인😮

🔎 코드

# 새로운 불면증 치료법
T = int(input())

a = set('0123456789')
count = 0

for test_case in range(1, T+1):
    origin_data = int(input())
    data = origin_data
    now_set = set()

    while True:
        # 입력 정수 문자열 변경
        data_str = str(data)

        # 입력 받은 문자열 집합 추가
        for for_set in data_str:
            now_set.add(for_set)

        # 0~9 집합과 비교
        if now_set == a:
            print(f'#{test_case} {data}')
            count = 0
            break

        count += 1
        data = origin_data * count

댓글남기기