RUBY

[백준] 이전 수열 본문

PS/BOJ

[백준] 이전 수열

RUBY_루비 2020. 10. 2. 23:59

출처:: https://www.acmicpc.net/problem/10973

분류:: 브루트포스

 

1. 문제 이해 및 해결과정

- 다음 순열 문제(hiruby.tistory.com/521)와 알고리즘 유사
1) 감소하는 것들 중 가장 큰 인덱스 찾기 
  1-1) 감소하는 것들이 없다면, 가장 처음 오는 수열이 된다
2) 인덱스 i보다 큰 수 중 a[i]보다 더 작은 값 찾기
3) a[i]와 a[j] 값 swqp
4) i보다 큰 수들을 내림차순으로 배열

 

2. 풀이방법

 1. 

#이전순열
#https://www.acmicpc.net/problem/10973
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. 감소하는 것들중 가장 큰 인덱스 찾기
    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]보다 더 작은 값 찾기
    for index in range(i+1,len(a)):
        if a[index]<a[i]:
            j=index
    #3. a[i]와 a[j] swap
    a[i],a[j]=a[j],a[i]
    #4. i보다 큰 수들을 역순(내림차순) 으로 배열
    a=a[:i+1]+sorted(a[i+1:],reverse=True)
    return a

res=next_permutation(a)
if res==-1: #사전 순으로 가장 처음 오는 수열일 경우
    print(-1)
else:
    print(' '.join(map(str,res)))

 

3. 오답원인

 

4. 알게된 점

 

'PS > BOJ' 카테고리의 다른 글

[백준] 가장 긴 바이토닉 부분 수열  (0) 2020.10.02
[백준] 차이를 최대로  (0) 2020.10.02
[백준] 가장 큰 증가 부분 수열  (0) 2020.10.02
[백준] 외판원 순회 2  (0) 2020.10.02
[백준] 제곱수의 합  (0) 2020.10.01
Comments