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 |