[백준] 2529번(부등호)

·2023년 7월 28일

백준 문제풀이

목록 보기
104/159

백준 2529번


최종 제출 코드

n = int(input())
array = [">"] + list(input().split())
stack = ['99']
visited = [False]*11

max_value = '0'
min_value = '9999999999'

def dfs():

  global max_value
  global min_value
  
  if len(stack) == n+2:
    result = ''.join(stack[1:])
    if max_value < result:
      max_value = result
    if min_value > result:
      min_value = result
    return

  for i in range(1, 11):
    if visited[i] != True:
      if array[len(stack)-1] == "<" and stack[-1] < str(i-1) or array[len(stack)-1] == ">" and stack[-1] > str(i-1):
        stack.append(str(i-1))
        visited[i] = True
        dfs()
        stack.pop()
        visited[i] = False

dfs()

print(max_value)
print(min_value)

◼️ 부등호를 array에 받아서 stack에 값을 추가할 때 조건 검사

  • stack의 원소는 최소값과 최대값을 출력할 때 수월하도록 문자열로 저장
  • 반복문에서 첫번째로 대입되는 원소는 stack에 무조건 추가되도록 stack의 첫번째 원소를 '99'로 놓고, array의 첫번째 원소는 '>'로 놓는다.
    ⇒ 이렇게 되면 원소의 범위인 0-9의 모든 값은 99보다 작기 때문에 첫번째 대입되는 숫자는 무조건 stack에 추가된다.
    ⇒ 처음에는 숫자끼리 비교하듯 stack의 초기값을 10으로 뒀었는데, 이렇게하면 2부터는 10보다 큰 값이 되어 stack에 추가되지 않는다.
  • stack의 길이가 n과 같아지면, stack의 첫번째 원소(99)를 제외한 원소들을 문자열로 만들어 최소값과 최대값을 업데이트한다.
    ⇒ 모든 원소의 길이가 같기 때문에 문자열을 활용하여 비교해도 무관
profile
백엔드 개발자가 되고 싶어요(22.8.15~)

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기