[python_파이썬_pass]백준_9012번_괄호_실버4_풀이

2024. 10. 10. 20:36코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/slUxXU5NCUQ?feature=shared

 

24년 10월 10일 회사 러닝타임 및 점심시간 활용 풀이

 

queue관련 학습을 한 후 문제를 보니 바로 해결이 가능했다.

https://heodinkcodingdiary.tistory.com/158

 

★[알고리즘 학습_deque, stack, buffer_python_파이썬]백준_2164번_카드2_deque_알고리즘 기초

공부하는허딩크 : https://www.youtube.com/live/Xx_DRXY3r2Q?feature=shared 아직 deque라이브러리 공부하기 전 상태로 아래의 코드로 제출했더니 시간초과가 발생list를 set으로 바꿔서 사용하여 시간초과를 해

heodinkcodingdiary.tistory.com

 

queue알고리즘이 아니더라도 stack의 별도 변수에 append와 pop을 활용하면 바로 해결 할 수 있는 문제였다.

중요한건 stack변수에 아무것도 없고  ')'가 먼저 나오면 stack변수에 ')'가 추가되어 결국 무조건 NO가 나올 수 밖에 없으며

처음에 '('가 나오더라도 매칭되는 ')'가 없으면 stack에 변수가 남게 되어 NO가 나올 수 밖에 없다는 것이다.

import sys
input = sys.stdin.readline

T = int(input())

for _ in range(T):
    test = input().rstrip()
    stack = []
    for i in test:
        if i == '(':
            stack.append(i)
        elif i == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                stack.append(i)
    if stack:
        print("NO")
    else:
        print("YES")

 

<다른 사람 코드 참고>

와...... 이건 상상도 못했다. "()"이게 정상적인 경우니까 이걸 ""로 replace를 해주고 최종적으로 VPS에 남는게 있으면 NO, 없으면 YES......

최고!!!!!

for _ in range(int(input())):
    VPS = input()

    while "()" in VPS:
        VPS = VPS.replace("()", "")

    if VPS:
        print("NO")
    else:
        print("YES")        

 

이것도 참고할만 하다.elif에서 if len(stack) != 0:이면 pop()을 바로 해주고, else라면 바로 NO출력

import sys
n = int(sys.stdin.readline())
for i in range(n):
  sequences = sys.stdin.readline()
  stack = []
  for VPS in sequences:
    if VPS == "(":
      stack.append("(")
    elif VPS == ")":
      if len(stack) != 0:
        stack.pop()
      else:
        print("NO")
        break
  else:
   if len(stack) !=0:
     print("NO")
   else:
      print("YES")  
728x90
반응형