SWEA (SW Expert Academy)/D3

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

hellosonic 2023. 5. 18. 23:11

문제 바로가기

 

SW Expert Academy

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

swexpertacademy.com

나의 코드 및 설명(시간초과)

  • 예를 들어, 3 0 1을 입력 받았을 때, 2중 for문을 통해 모든 연속된 수열(3,0,1,30,301)을 구해서 리스트에 저장한다.
  • 하지만 이렇게 풀게 되면 시간초과가 발생하게 된다.
t = int(input())

for test_case in range(1, t+1):
    n = int(input()) #정수의 개수
    num = ""
    while True:
        num += "".join(map(str, input().split()))
        if len(num) == n:
            break
    num_list = list(map(int, str(num)))
    result = []
    for i in range(1, len(num_list)+1): # i = 1,2,3
        for j in range(len(num_list)+1 - i):
            if int("".join(map(str, num_list[j:j+i]))) not in result:
                result.append(int("".join(map(str, num_list[j:j+i]))))

    answer = -1
    for i in range(max(result)+1):
        if i not in result:
            answer = i
            break

    print("#{} {}".format(test_case, answer))

다른 코드 및 설명

  • num = ""
    num += "".join(map(str, input().split())) #공백을 포함한 문자를 입력받는다.
    줄바꿈, 공백을 통한 입력은 while문을 활용한다.
  • 예를 들어, string = "hellosonic" 일 때, if "sonic" in string: 과 같이 문자열을 조건문에 그대로 활용이 가능하다. 
t = int(input())
for test_case in range(1, t+1):
    n = int(input())
    num = ""
    while True:
        num += "".join(map(str, input().split())) #공백을 포함한 문자를 입력받는다.
        if len(num) == n: #문자열의 길이가 n이되면 입력 반복문 탈출
            break
    check = 0 
    while True: #0부터 문자열에 있는지 찾는다.
        if str(check) not in num:
            break
        check += 1

    print("#{} {}".format(test_case, check))

피드백

분명히 잘 풀었다고 생각했는데 시간초과가 발생했다. 생각보다 단순하게 푸는 것이 가능했다. 입력값들을 문자열로 만들고, 그 문자열에 str 자료형으로 변환한 숫자가 포함되지 않을 때까지 반복문을 돌리면 되는 것이었다. 시간 초과를 방지하기 위한 문제풀이는 어떤 것이 있을까 고민해보는 것이 습관화되어야할 것 같다. 단순하게 푸는 연습을 하자