[백준] 10973번 (python 파이썬) 이전 순열
2021. 4. 4. 18:14ㆍ발돋움/알고리즘
728x90
반응형
728x90

10972번에서 조건만 거꾸로 해주면 되는 문제이다.
10972조건은 아래에 상세하게 설명했으니 참고하면 된다.
[백준] 10972번 (python 파이썬) 다음 순열
입력으로 주어진 순열의 다음 순열을 찾는 문제이다. 만약 다음 순열이 없다면 (입력으로 주어진 순열이 마지막 순열) -1 을 출력해야한다. 순열들을 살펴보면 바뀌어야하는 같은 방법으로 푼 코
happytum.tistory.com
def makenewlst(first, sortlst):
sortlst.sort(reverse = True)
first += sortlst
return ' '.join(map(str, first))
def check(n):
for i in range(n - 1, 0, -1):
if lst[i - 1] > lst[i]: #앞이 바뀌어야할 타이밍
for j in range(n - 1, 0, -1): #적절한 수 찾기 현재 바꿀 위치수보다 1만큼 작은 수
if lst[j] < lst[i - 1]:
lst[i - 1], lst[j] = lst[j], lst[i -1]
return makenewlst(lst[:i], lst[i:])
return -1
n = int(input())
lst = list(map(int, input().split()))
print(check(n))
def check(n):
for i in range(n - 1, 0, -1):
if lst[i - 1] > lst[i]: #앞이 바뀌어야할 타이밍
for j in range(n - 1, 0, -1): #적절한 수 찾기 현재 바꿀 위치수보다 1만큼 작은 수
if lst[j] < lst[i - 1]:
lst[i - 1], lst[j] = lst[j], lst[i -1]
return ' '.join(map(str, lst[:i] + sorted(lst[i:], reverse = True)))
return -1
n = int(input())
lst = list(map(int, input().split()))
print(check(n))


위 그림은 이전 순열 찾는 코드를 이해하는 법이다.
728x90
반응형
'발돋움 > 알고리즘' 카테고리의 다른 글
| [백준] 6603번 (python 파이썬) 로또 (0) | 2021.04.05 |
|---|---|
| [백준] 10974번 (python 파이썬) 모든 순열 (0) | 2021.04.04 |
| [백준] 10972번 (python 파이썬) 다음 순열 (0) | 2021.04.04 |
| [백준] 2529번 (python 파이썬) 부등호 (0) | 2021.03.30 |
| [백준] 14501번(python 파이썬) 퇴사 (0) | 2021.03.30 |