알고리즘/알고리즘_swea

[Python][SWEA] 3809. 화섭이의 정수 나열 D3

Jerry_K 2024. 5. 17. 20:41

🗒️ 파이썬 코드 풀이

T = int(input())
for tc in range(1, T+1):
    N = int(input())
    value = ""

    while True :
        value += ''.join(list(input().split()))
        if len(value) == N : break

    n = 0
    while True:
        if str(n) not in value:
            break
        n += 1

    print(f"#{tc} {n}")

 

1. 우선 입력구조가 다른 문제와 다르다. (10개의 입력이 넘어가면 엔터가 있음)

이런 경우  반복문을 돌려서 해당값을 받아줘야한다. 

N의 개수를 입력 받기 때문에,  value의 크기가 N개가 넘어가면 break를 해준다.

 

2. value는 문자열로, 0부터 하나씩 증가하면서 해당 n의 값이 value안에 있는지 확인해준다.

 

🧐 문제 코멘트

어려운 문제는 아니다.... 근데 나는 이 방법이 생각이 나지 않았다 ㅠㅠ

그래서  2중 for문을 쓰면서  1자리수/2자리수/3자리수 이런식으로 나눠서 아주 복잡하게 하려했다...

값을 리스트 형식으로 받으면 끝없이 어려워지지만 ,  문자형으로하면 엄청 쉬워진다.

 

또한 입력에서도 문제가 있었다.

while문을 이용해서 입력을 받는거는 낯설었고, 결국 다른 사람 풀이를 참고했다.


📚 문제

화섭이는 다음과 같은 흥미로운 추측에 대해 들었다.

“모든 정수는 π = 3.14159265…의 어떤 연속한 부분으로 나타난다.”

화섭이는 π에 대해 이것을 테스트해 보기는 힘들다고 생각했고, 그냥 유한한 정수열에 대해서 위처럼 연속한 부분을 끊어내어 보았다.

예를 들면 “3 0 1”같은 정수열로는 3, 0, 1, 30, 301을 만들 수 있다.

화섭이는 주어진 정수열로 만들 수 없으면서 가장 작은 정수가 무엇인지 궁금해졌다.

이를 구하는 프로그램을 작성하라. 위의 예에서는 0, 1은 나타나지만 2는 나타나지 않으므로 2가 답이 된다.

두 번째 테스트케이스를 예로 들면,


위 그림과 같이 0부터 11까지의 정수는 만들 수 있으나 12를 만들 수 없다. 그러므로 12가 답이 된다.


[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 N(1 ≤ N ≤ 103)이 주어진다.

다음으로는 N개의 정수 d1, d2, …, dN (0 ≤ di ≤ 9)이 순서대로 주어진다.

d들은 공백 하나 또는 줄바꿈으로 구분되어 있다.


[출력]

각 테스트 케이스마다 만들어낼 수 없는 가장 작은 정수를 출력한다.