9081번: 단어 맞추기

입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알

www.acmicpc.net


 

c++에는 algorithm 헤더에 next_permutation이라는 함수가 있다고 한다. 파이썬에서는 없으니 구현하는 수 밖에 없다.

원리를 찾아보니 이해하기 어려워 정리를 한다.

예시: 136541

1. 끝에서부터 비교해 앞에것이 더 작은 곳을 i로 정한다. (3 < 6)

2. 끝에서부터 i값보다 큰 값을 찾아 j로 정한다. (3 < 4)

3. i값과 j값을 서로 바꾼다.

4. i뒤에 있는 것들을 순서를 뒤집어준다.

답: 141356

 

import sys
input = sys.stdin.readline


def nextPermutation(arr):
    i = len(arr)-2
    while i >= 0 and arr[i] >= arr[i+1]:
        i -= 1
    if i == -1:
        return False

    j = len(arr)-1
    while arr[i] >= arr[j]:
        j -= 1

    arr[i], arr[j] = arr[j], arr[i]
    result = arr[:i+1]
    result.extend(list(reversed(arr[i+1:])))
    return result


T = int(input())
for _ in range(T):
    _input = list(input().rstrip())
    answer = nextPermutation(_input)
    if not answer:
        print("".join(_input))
    else:
        print("".join(answer))
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기