# 2023-02-26 21:55:57
# https://www.acmicpc.net/problem/10972
import sys
input = sys.stdin.readline
n = int(input())
m = list(map(int, input().split()))
for i in range(n-1, 0, -1) :
if m[i-1] < m[i] : # 앞 < 뒤
for j in range(n-1, 0, -1) :
if m[i-1] < m[j] :
m[i-1], m[j] = m[j], m[i-1]
m = m[:i] + sorted(m[i:])
print(*m)
exit() # 코드 종료
print(-1) # 코드 종료 발생 X -> -1 출력
N = 5인 경우 사전순으로 나열해보자.
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 3 4
...
1 2 3 4 5
의 경우 4
와 5
를 교체한다.
1 2 3 5 4
의 경우 3
과 4
를 교체하고, 원래 3
이 있던 자리를 기준으로 뒤의 숫자를 정렬한다.
1 2 4 3 5
의 경우 3
과 5
를 교체한다.
1 2 4 5 3
의 경우 4
와 5
를 교체하고, 원래 4
가 있던 자리를 기준으로 뒤의 숫자를 정렬한다.
이 원리를 확장해보자.
for i in range(n-1, 0, -1)
1 3 5 4 2
의 경우 3
과 5 4 2
중에 교체해야 한다. 이 때 (i-1)번째 뒤에 있는 숫자들은 역순으로 정렬된다. (i-1) 이후에 있는 숫자 중에서 3
보다 큰 숫자들 중 가장 작은 숫자는 4
이다. 따라서 3
과 4
를 교체한다.for j in range(n-1, 0, -1) :
if m[i-1] < m[j] :
m[i-1], m[j] = m[j], m[i-1]
m = m[:i] + sorted(m[i:])
print(*s)
*
을 붙이면 공백과 함께 각 원소를 출력함1 2 3 4 5
exit()
find_answer = True
와 같은 변수를 만들지 않아도 됨next_permutation
을 사용하면 쉽게 풀 수 있음나중에도 아이디어 생각이 떠오르지 않을 것 같다. 나중에 다시 풀어보자!
그리디 같은데 왜 완전 탐색일까?