Algorithm/BOJ

[백준] 2529 부등호

메린지 2024. 4. 11. 00:09

1. 문제

 

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

 

2529번: 부등호

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

www.acmicpc.net

 

 

2. 풀이

 

1) 숫자를 사용했는지 아닌지 파악하는 visited 변수 설정, max/min 변수 설정
2) bt 함수: 리스트에 숫자 하나는 넣고 시작 ==> 부등호 하나, visited에 방문안했던 (False)인 숫자 가져와서 부등호 만족하는지 확인하고 다음으로 넘김 ==> 만약 다음에 안되는 경우의 수면 더이상 진행안됨
3) idx == n 까지 다오면 그 숫자가 max/min인지 아닌지 저장

 

## code ##

import sys

n = int(sys.stdin.readline())
bo = sys.stdin.readline().split()

visited = [False] * 10
max_value = 0
min_value = 99999999999
def bt(nums, idx, visited):
    global max_value, min_value
    if idx == n:
        value = int(''.join(map(str, nums)))
        max_value = max(max_value, value)
        min_value = min(min_value, value)
        return

    for i in range(10):
        if not visited[i]:
            visited[i] = True
            if bo[idx] == '>' and nums[idx] > i:
                bt(nums+[i], idx + 1, visited)
            elif bo[idx] == '<' and nums[idx] < i:
                bt(nums + [i], idx + 1, visited)
            visited[i] = False

for i in range(10):
    visited[i] = True
    bt([i], 0, visited)
    visited[i] = False

print(max_value)
while len(str(min_value)) < n+1:
    min_value = '0' + str(min_value)
print(min_value)

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 19844 쉬운 계단  (2) 2024.04.19
[백준] 17298 오큰수  (1) 2024.04.11
[백준] 2156 포도주 시식  (0) 2024.04.10
[백준] 10819 차이를 최대로  (0) 2024.04.10
[백준] 2579 계단오르기  (0) 2024.04.09