알고리즘

백준 알고리즘 4949 [파이썬]

Brad Daeho Lee 2021. 3. 11. 00:04

 

 

배운 내용

이 문제는 스택을 사용해서 문제를 풀었다. Stack은 데이터를 일시적으로 저장하고, 후입 선출(LIFO, Last In First Out) 구조를 가지고있다. 파이썬에서는 append를 사용해서 데이터를 저장하고 pop을 사용해서 데이터를 꺼낸다.

 

리스트로된 stack을 string값으로 바꿀 때. string 변수값을 따로 만들고 그 안에 리스트 element를 하나씩 더해주면 된다.

string = ""
  for ele in stack:
    string += ele

 

만약 string에 아무값도 없으면을 코드로하면

if not string:

문제 

 

 

문제풀이

stack = []
answer = []
while stack != ['.']:
  stack = []
answer = []
while stack != ['.']:
  stack = list(input())
  if stack == ['.']:
    break
  lst = ['(', ')', '[', ']']
  n = -1
  # for 반복문으로 stack에 뒤에부터 lst안에 있는 element 빼고 다른 element는 다 빼낸다.
  for i in range(len(stack)):
    if stack[n] not in lst:
      stack.pop(n)
    else: #lst안에 있는 element가 stack[n]자리에 있으면 stack[n-1]값을 검사한다.
      n = n-1
  string = ""
  for ele in stack:
    string += ele
  # string안에 괄호가 제대로 되어있는지 알기위해서 '()', '[]' 값이랑 비교하고 그 값들을 없앤다.
  # ')('이나 '][' 제대로 괄호가 나열되어있지 않으면 string에 값이 남아 있을 것이다.
  while  '()' in string or '[]' in string: 
    string = string.replace('()', '')
    string = string.replace('[]', '')
  if not string: #만약 string변수 안에 아무런 값도 없으면!
    answer.append('yes')
  else:
    answer.append('no')
for i in answer:
  print(i)