본문 바로가기

알고리즘/백준 (Pyhthon)

[알고리즘] 백준 2529 부등호 / python

https://www.acmicpc.net/problem/2529

 

2529번: 부등호

여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력�

www.acmicpc.net

 

#순열이 오름차순일때 사용하는 함수
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)))