백준 python 기록

백준 파이썬 2529 부등호

작지 2021. 10. 18. 23:24

백준 링크:https://www.acmicpc.net/problem/2529

 

2529번: 부등호

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

www.acmicpc.net

처음부터 끝까지 조건에 맞는 경우를 새는 브루트포스 and 백트레킹 문제인데

부등호를 어떻게 넣나 한참을 생각을 하고 결국 모르겠어서 다른 분들이 푼 해결법으로 해결했다.

n=int(input())
string=list(map(str,input().split()))
nums=[0]*10

min_value=""
max_value=""

def check(i,j,k):
    if k == '<':
        return i < j
    else:
        return j < i


def solve(idx,s):
    global min_value, max_value

    if (idx == n+1):
        if len(min_value) == 0:
            min_value = s
        else:
            max_value = s
        return
    for i in range(10):
        if nums[i] == 0:
            if idx == 0 or check(s[-1],str(i),string[idx-1]):
                nums[i] = 1
                solve(idx+1,s+str(i))
                nums[i] = 0

solve(0,"")
print(max_value)
print(min_value)

min값은 무조건 첫 값이다. 또한 max값은 무조건 맨 끝값이다.

for in 문을 0부터 시작했기때문에

 

부등호 처리를 check 함수를 만들어 FASLE, TRUE 값을 뱉어내개 만들어서 조건식에 맞다면 DFS함수가 이어지게 만들었다.