2529_부등호

hii_·2022년 5월 4일
0

BOG

목록 보기
7/22

이제 슬슬 파이썬에 익숙해지는 것 같당!
근데 이러다가 c++이랑 파이썬 둘다 못하는 0개언어 사람이 되버리면 어떡하지 ㅎㅅㅎ,,

이 문제는 원석오빠가 백트레킹 문제를 풀어보라고 준 문제이담!
근데 씨쁠에서 파이썬으로 바꾼 뒤로 백트레킹을 처음 풀어보는게 레전드,,
감두 안와서 블로그들 보면서 해봤는데 설명이 길게 나와있는 블로그가 없었답 ㅜ 쉬운문제여서 그런거같당
그래서 코드를 계속 보면서 이해해보려고 했는데 처음엔 그것도 잘 안됐당..
근데 한번 이해가 되고 난 뒤로는 실마리가 풀리는 느낌이었담!
생각보다 쉬운거였어서 왜 사람들이 설명을 길게 안 적어놨는지 알 것 같았다 왜냐면 쓸말이 정말 없기 때문..
그래도 아직 혼자 코드 짜라고 하면 못짜겠어서.. 반복하고 외우는것만이 살길이다 ㅠㅠ!

num = int(input())
op = input().split()
mx, mn = "", ""    # 최대, 최소숫자
check = [False]*10    # 백트래킹 체크할 배열

def verify(a, b, c):    # 해당 자리에 숫자가 들어갈 수 있는지 검증
    if c == '>':
        return a>b
    else:
        return a<b

def fun(depth, s):    # 재귀함수 호출 DFS
    global mx, mn

    if depth == num+1:    # 끝까지 도달했을때
        if len(mn) == 0:    # 0부터 9로 가다보니 처음성공한게
            mn = s    # 제일 최소
        else:
            mx = s    # 최대는 계속 갱신
        return

    for i in range(10):    # 0 - 9 까지
        if not check[i]:
            if depth == 0 or verify(s[len(s)-1], str(i), op[depth-1]):    
            # depth가 0이면 오류나서
                check[i] = True    # 체크하고
                fun(depth+1, s+str(i))    # 재귀부르고
                check[i] = False    # 재귀 끝나면 체크해제

fun(0,"")    # 무에서 시작
print(mx)
print(mn)
profile
🐢👩‍💻⛄🤍💜

0개의 댓글