250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이진탐색
- 낙관적락
- 즉시로딩
- shared lock
- 일대다
- eager
- exclusive lock
- 백트래킹
- 다대일
- 연관관계
- 데코레이터
- SQL프로그래밍
- fetch
- 다대다
- querydsl
- 힙
- PS
- FetchType
- 유니크제약조건
- JPQL
- 지연로딩
- 스프링 폼
- 비관적락
- dfs
- CHECK OPTION
- BOJ
- 연결리스트
- 스토어드 프로시저
- 동적sql
- execute
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
[BOJ] 10972번 다음 순열 본문
728x90
알고리즘
예를 들어 입력 배열로 4 5 1 3 2 이 들어왔다고 하자
● 뒤에서부터, arr[i-1] < arr[i] 가 되는 i를 찾는다. i 는 3이 된다.
● x를 i-1이라 하고, y를 i라고 하자. 그러면 x는 2, y는 3이다
● 뒤에서부터, arr[x] 보다 큰 값이 있으면, arr[x]와 swap하고, break한다. 그러면 배열은 4 5 2 3 1 이 된다.
● y 이후의 배열에 대하여 정렬을 한다. 즉, arr = arr[:y] + sorted(arr[y:])
● 그러면 배열은 4 5 2 1 3 이 된다. 이것이 입력배열의 다음 순열이 된다.
N = int(input())
arr = list(map(int, input().split()))
def f(arr):
for i in range(N-1, 0, -1):
if arr[i-1] < arr[i]:
x = i-1
y = i
for j in range(N-1, y-1, -1):
if arr[x] < arr[j]:
arr[x], arr[j] = arr[j], arr[x]
break
arr = arr[:y] + sorted(arr[y:])
return arr
return -1
arr = f(arr)
if arr == -1:
print(arr)
else:
print(*arr)
'Problem Solving' 카테고리의 다른 글
[BOJ] (GRAPH, DFS)13023번 ABCDE (0) | 2022.01.27 |
---|---|
[BOJ] 15988번 1, 2, 3 더하기 3 (0) | 2022.01.26 |
[BOJ] 14500번 테트로미노 (0) | 2022.01.22 |
[BOJ] 1107번 리모컨 (0) | 2022.01.20 |
[BOJ] 17427번 약수의 합 2 (0) | 2022.01.15 |