티스토리 뷰

알고리즘/백준

10972번 다음 순열 백준

글을 쓰는 개발자 2020. 12. 6. 19:57
반응형

문제:www.acmicpc.net/problem/10972

 

10972번: 다음 순열

첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다.

www.acmicpc.net

이 문제는 N과M에서 했던 것을 이용하여 풀면 시간초과나는 것이 확정이기 때문에 그 방법으로 안 풀었다.

그렇다고 어떻게 풀어야 할 지 몰라서 결국 다른 분들이 어떻게 풀었나 찾아보았다.

 

풀이법은 이 블로그를 통해 봤다.

참고: fieldanimal.tistory.com/24

 

백준 10972 다음 순열

<링크> https://www.acmicpc.net/problem/10972 <소스코드> 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 32 33 34 #include #include using namespace std; int a[1..

fieldanimal.tistory.com

코드는 백준 맞은 사람 python3 중에 랭킹 1등에 해당하는 코딩을 봤다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
= int(sys.stdin.readline())
seq = sys.stdin.readline().rstrip().split(' ')
seq = [int(x) for x in seq]
end = 0
findPoint = False
for i in range(len(seq)-10-1):
    if seq[i-1< seq[i]:
        end = i-1
        findPoint = True
        break
if findPoint == True:
    for j in range(len(seq)-1, end, -1):
        if seq[end] < seq[j]:
            seq[j], seq[end] = seq[end], seq[j]
            break
    seq = seq[:end+1+ seq[len(seq)+1:end:-1]
    sys.stdout.write(' '.join(map(str,seq))+'\n')
else:
    print(-1)
cs

첫번째로 처음부터 끝까지 다 내림차순이면 마지막이므로 findPoint를 False상태 그대로 두고 그렇지 않다면 True로 바꾼다음 if문에서 다음 순열을 찾는다.

end는 오른쪽에서 왼쪽까지 가는데 더이상 내림차순이 아닌 숫자인 것을 의미한다.

다음 순열 찾는 for문에서 end에 위치에 있는 값보다 크면서 가장 가까운 값을 찾는다. 그런다음 swap을 하고나서 end에 위치까지는 그대로 두고 그 뒤에 있는 숫자들은 역순으로 돌린다. 그러면 정답이 나온다.

반응형

'알고리즘 > 백준' 카테고리의 다른 글

맞춰봐 1248번 백준 파이썬  (0) 2020.12.08
외판원 순회2 10971번 백준 파이썬  (0) 2020.12.07
15664번 N과M(10) 백준  (0) 2020.12.06
15663번 N과M(9) 백준  (0) 2020.12.06
1107번 리모컨 백준  (0) 2020.12.05
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함