just inside

[SWEA/D2] 1288. 새로운 불면증 치료법 본문

카테고리 없음

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

방울도마도 2024. 10. 31. 16:58
728x90

[문제 링크]

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


[문제 설명]

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

호석이는 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번 양을 세고 있다. )


제출 코드

t = int(input())

for i in range(1, t+1):
    n = int(input())
    
    # 정답 집합 생성
    ans = set([i for i in range(10)])
    # 나온 숫자 저장할 집합 생성
    res = set()
    k = 0
    
    while True:
        k += 1
        kn = str(k * n)
        # kn번째 양에 나오는 수를 결과집합에 추가
        for j in kn:
            res.add(int(j))
        
        # 결과 집합과 정답 집합이 일치하면 kn 출력후 탈출
        if res == ans:
            print('#'+str(i), kn)
            break

 

풀이

  • 처음에 시점이라고 이해해서 k를 출력하는 줄 알았는데, 몇 번째 양(kn)을 셌는지 묻는 것이므로 kn을 출력해야 한다.
  • set 자료형을 이용해, kn에 포함된 숫자를 계속 더해준다.
  • 정답 집합과 일치하면, kn을 출력해준다.

알아둘 사항

  • set에 새로운 원소를 추가할때는 add 사용
728x90