여니의 취준 준비/코딩테스트 (Python)

[n2697] 다음 수 구하기 in python

여니's 2021. 11. 9. 10:58


시간을 단축하기 위해 배열의 맨끝에서부터 탐색을 시작했다.

 

예시중에서

2 3 9 1 3 4 3 9 9 7 4 2 를(<- 순으로) 살펴보았다.

왼쪽에 있는 값(3)이

오른쪽에 있는 값보다 작아지는 구간을 찾아낸다.

해당 위 배열에서는

idx 7번째가 해당되는 구간이다.

 

 

그리고 오른쪽에 있는 값(idx 7번)부터 배열의 맨끝까지를

오름차순으로 정렬한다.

 

그러고 난 뒤에

왼쪽에 있는값(3)보다 바로 큰 값(4)을 찾아낸 뒤

서로 스왑한다.

 

그리고 반복문을 종료하면 끝!

 

t = int(input())
for _ in range(t):
    button = False
    arr = list(map(int, input()))
    answer = ''
    for i in range(len(arr) - 1, -1, -1):
        if arr[i] <= arr[i - 1]:
            continue
        else:
            arr[i:] = sorted(arr[i:])
            for idx, num in enumerate(arr[i:]):
                if arr[i - 1] < num:
                    arr[i - 1], arr[idx + i] = arr[idx + i], arr[i - 1]
                    button = True
                    for a in range(len(arr)):
                        answer += str(arr[a])
                    print(answer)
                    break
            if button:
                break
    if not button:
        print("BIGGEST")