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
- 안드로이드
- 오픽
- 이진탐색 #나무 자르기
- 안드로이드주석
- 탑다운
- English
- 이진탐색
- 다이나믹프로그래밍
- 영어회화
- 디피
- 피보나치수열
- 메모이제이션
- 오픽노잼공부방법
- 바텀업
- XML주석
- 오픽공부법
- XML
- 영어말하기
- dp
- fibo
- 오픽점수잘받는방법
- stack 스택
- 주석
- opic
- 오픽노잼
- 오픽가격
- ㅂ
- topdown
- dynamicProgramming
Archives
RUBY
[백준] 다음 순열 본문
출처:: www.acmicpc.net/problem/10972
분류:: dp
1. 문제 이해 및 해결과정
- 1 부터 n으로 이루어진 수 1) a[i] <a[i+1] 이 성립하는 인덱스 i의 최대값을 찾는다. 찾을 수 없다면 수열 a가 마지막항이다. 2) 인덱스 i보다 크고, a[i]보다 큰 것들 중 가장 먼 인덱스 j를 찾는다 3) a[i]와 a[j] 값을 교환한다 4) 인덱스 i이후 값들을 오름차순으로 정렬 ex) [ 3, 1, 4, 2] 1) 증가하는 마지막 인덱스를 찾음 a[1]=1 2) 1보다 큰 값중 가장 먼 인덱스는 4이다. a[4]=2 3) a[1]과 a[4]를 swap [3,2,4,1] 4) a[1] 다음의 숫자들을 오름차순으로 정렬한다 [3,2,1,4] ex) [ 1,2,3,4] 1) 증가하는 마지막 인덱스를 찾음 a[3]=3 2) 3보다 큰 값중 가장 먼 인덱스는 4이다. a[4]=4 3) a[3] 과 a[4] swap [1,2,4,3] 4) a[3] 다음의 숫자들을 오름차순으로 정렬한다. [1,2,4,3] ex) [5,4,3,2,1] 1) 증가하는 마지막 인덱스를 찾음 ,없음-> a가 마지막 수열이다. 이를 Narayana Pandita lexicographic ordering,라고 함 |
2. 풀이방법
1.
#다음 순열
#https://www.acmicpc.net/problem/10972
import sys
sys.stdin = open("input.txt","r")
input=sys.stdin.readline
n = int(input())
a = list(map(int,input().split()))
def next_permutation(a):
i=-1
#1. a[i] < a[i+1] 을 만족하는 인덱스의 최대값 찾기
for index in range(len(a)-1):
if a[index]<a[index+1]:
i=index #증가하는 마지막 인덱스를 찾는다.
#1-1
if i==-1: #증가하는 마지막 인덱스가 없다면
return -1 #모두 감소하는 수열
#2. 인덱스 i보다 크고, a[i]보다 큰 것들 중 가장 먼 인덱스 j찾기
for index in range(i+1,len(a)):
if a[index]>a[i]:
j=index
#3. a[i]와 a[j]교환
a[i],a[j]=a[j],a[i]
#4. 인덱스 i이후 값들을 오름차순으로 정렬
a=(a[:i+1]+sorted(a[i+1:]))
return a
res=next_permutation(a)
if res!=-1: #다음 수열이 있으면
print(' '.join(map(str,res)))
else: #마지막 수열
print(-1)
3. 오답원인
4. 알게된 점
'PS > BOJ' 카테고리의 다른 글
[백준] 모든 수열 (0) | 2020.10.02 |
---|---|
[백준] 합분해 (0) | 2020.10.02 |
[백준] 가장 긴 바이토닉 부분 수열 (0) | 2020.10.02 |
[백준] 차이를 최대로 (0) | 2020.10.02 |
[백준] 이전 수열 (0) | 2020.10.02 |
Comments