https://www.acmicpc.net/problem/2529
#순열이 오름차순일때 사용하는 함수
def next_permu(a):
i = len(a)-1
while i > 0 and a[i-1] >= a[i]:
i -= 1
if i <= 0:
return False
j = len(a)-1
while a[j] <= a[i-1]:
j -= 1
a[i-1], a[j] = a[j], a[i-1]
j = len(a)-1
while i < j:
a[i], a[j] = a[j], a[i]
i += 1
j -= 1
return True
#순열이 내림차순일때 사용하는 함수
def prev_permu(a):
i = len(a)-1
while i > 0 and a[i-1] <= a[i]:
i -= 1
if i <= 0:
return False
j = len(a)-1
while a[j] >= a[i-1]:
j -= 1
a[i-1], a[j] = a[j], a[i-1]
j = len(a)-1
while i < j:
a[i], a[j] = a[j], a[i]
i += 1
j -= 1
return True
#부등호를 만족하는지 확인하는 함수
def check(permu, a):
for i in range(len(a)):
if a[i] == '<' and permu[i] > permu[i+1]:
return False
if a[i] == '>' and permu[i] < permu[i+1]:
return False
return True
k = int(input())
a = input().split()
small = [i for i in range(k+1)]
big = [(9-i) for i in range(k+1)]
#부등호를 만족하지 못한다면, 다음 순열을 구해서 다시 확인한다
#순열이 끝이라면 next_permu함수는 True를 리턴한다
while True:
if check(small, a):
break
if not next_permu(small):
break
#부등호를 만족하지 못한다면, 다음 순열을 구해서 다시 확인한다
#순열이 끝이라면 prev_permu함수는 True를 리턴한다
while True:
if check(big, a):
break
if not prev_permu(big):
break
print(''.join(map(str, big)))
print(''.join(map(str, small)))
'알고리즘 > 백준 (Pyhthon)' 카테고리의 다른 글
[알고리즘] 백준 1248 맞춰봐 / python, 백트랙킹 (0) | 2020.07.01 |
---|---|
[알고리즘] 백준 1339 단어수학 / python (0) | 2020.06.28 |
[알고리즘] 백준 14889 스타트와 링크 / python (0) | 2020.06.20 |
[알고리즘] 백준 10974 모든 순열 / python, 순열 (0) | 2020.06.20 |
[알고리즘] 백준 1748 수 이어 쓰기 / python (0) | 2020.06.17 |