반응형
https://www.acmicpc.net/problem/2529
문제에서 주어진 조건은 숫자는 0~9까지의 정수가 들어가고 선택된 숫자가 중복이 되어서는 안되며 부등식을 만족해야하는게 조건이다.
0~9까지의 조건을 만족하기 위해서 num은 0~9까지 반복되고 선택된 숫자가 중복되었는지 확인하기 위해서 visited라는 list를 이용하여 숫자가 사용되었는지 확인하였다.
그리고 매회마다 이전 숫자와 현재 숫자를 비교해서 부등식이 일치하면 res라는 변수에 숫자를 문자열로 추가하도록 구현하였다.
처음에 들어가는 숫자인지 아닌지 구분하기 위해 idx가 -1인 경우의 조건을 추가하였고 idx가 k와 일치하게 되면(부등식을 완성하면) result라는 리스트에 res를 추가하고 나중에 출력할때 최댓값과 최솟값인 끝과 맨앞을 출력해주었다.
import sys
cnt=[]
input=sys.stdin.readline
result = []
def recur(idx,visited,before_No,res):
if idx==k:
result.append(res)
return
for num in range(0,10):
if idx==-1:
visited[num]=1
recur(idx+1,visited,num,res+str(num))
visited[num]=0
if not visited[num]:
if compare[idx] == "<":
if before_No < num:
visited[num]=1
recur(idx+1,visited,num,res+str(num))
visited[num]=0
continue
else:
if before_No > num:
visited[num]=1
recur(idx+1,visited,num,res+str(num))
visited[num]=0
continue
k = int(input())
compare = list(input().split())
recur(-1,[0]*10,-1,"")
print(result[len(result)-1],result[0])
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
Python 11048번 이동하기 (0) | 2022.08.03 |
---|---|
Python 14225번 부분수열의 합 (0) | 2022.08.01 |
Python 1182번 부분수열의 합 (0) | 2022.07.31 |
Python 6603번 로또 (0) | 2022.07.29 |
Python 1759번 암호 만들기 (0) | 2022.07.28 |