1288

HoRi·2022년 7월 22일
0

SWEA_PY

목록 보기
22/32

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<=10^6)이 주어진다.

[출력]

각 테스트 케이스마다 '#t'(t는 테스트 케이스 번호를 의미하며 1부터 시작한다.)를 출력하고,
최소 몇 번의 양을 세었을 때 이전에 봤던 숫자들의 자릿수에서 0에서 9까지의 모든 숫자를 보게 되는지 출력한다.
(민석이는 tN번 양을 세고 있다.)

코딩

T = int(input())					# 값을 입력 받고 정수형으로 변환해서 T에 저장(테스트 케이스)

for i in range(1, T+1):				# 1부터 T까지 1씩 증가하는 반복문
    N = int(input())				# 값을 입력 받고 정수형으로 변환해서 N에 저장(양을 본 횟수)
    li  = [0] * 10					# 0의 값 10개를 가지는 리스트 생성
    
    x = 0							# 변수 x를 0으로 초기화(N의 배수 역할을 할 변수) 
    while 0 in li:					# li 리스트 안에 0이 있다면 계속 반복
        x += 1						# 변수 x에 1을 더해줌
        num = str(x * N)			# 입력된 수의 길이를 알아내기 위해서 N의 길이를 문자열로 변환
        							# 여기서 반복하는 동안 입력된 수의 배수에 해당하는 길이도 계산해야 하기 떄문에 N에 x를 곱한 값을 문자열로 변환
        for j in range(len(num)):	# 0부터 num의 길이까지 1씩 증가하며 반복
            li[int(num[j])] = 1		# 문자열로 변환된 num에서 0부터 num의 길이 - 1까지 인덱스 값을 가지고와서
            						# 정수형으로 변환시킨 다음 li 리스트의 인덱스로 활용해서 해당하는 곳의 값에 1을 저장
    print('#{} {}'.format(i, x*N))	# format함수를 사용해서 테스트 케이스 번호와 0부터 9까지 모든 수를 보게 된 양의 수를 출력



모든 출처는 SW Expert 아카데미에 있습니다.

해당 글은 영리적 목적이 아닌 학습의 기록으로 사용되었습니다. 오기나 잘못된 부분은 말씀해주시면 수정하겠습니다.

profile
무지성 작성소

0개의 댓글