본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 4949.균형잡힌 세상

 

1차 풀이 . 실패

import sys
input = sys.stdin.readline

def checkIsCorrect(text):
  stack = []
  pair = {']':'[', ')':'(' }
  for t in text:
    if t == '[' or t =='(':
      stack.append(t)
    if t == ']' or t == ')':
      if not stack:
        return False
      if stack and stack[-1] != pair[t]:
        return False
      if stack and stack[-1] == pair[t]:
        stack.pop()
  if stack:
    return False
  else:
    return True
  
      
def main():
  text = ''
  while text != '.':
    text = input().strip()
    if checkIsCorrect(text):
      print('yes')
    else:
      print('no')


if __name__ == '__main__':
  main()

 

맞는 것 같은데 20%에서 끊긴다.. 왜 그럴까 싶어 질문 게시판에 들어갔더니 비슷한 사례가 많았다.

그에 대한 답변 중 참고할 답변 게시글이 있었는데, 얘는 주기적으로 리마인드해야겠다.

( 링크 )

 

 

2차 제출 . 성공

def checkIsCorrect(text):
  stack = []
  pair = {']':'[', ')':'(' }
  for t in text:
    if t == '[' or t =='(':
      stack.append(t)
    if t == ']' or t == ')':
      if not stack:
        return False
      if stack and stack[-1] != pair[t]:
        return False
      if stack and stack[-1] == pair[t]:
        stack.pop()
  if stack:
    return False
  else:
    return True
  
      
def main():
  while True:
    text = input()
    if text == '.':
      break
    if checkIsCorrect(text):
      print('yes')
    else:
      print('no')


if __name__ == '__main__':
  main()

 

처음에 받아올 때 strip() 하며 이상하게 돌게 된 것 같아 그 부분을 수정해주었다.

'CodingTest > Baekjun Online Judge' 카테고리의 다른 글

[ BOJ / 파이썬 ] 2178.미로 탐색  (0) 2023.01.27
[ BOJ / 파이썬 ] 1926. 그림  (0) 2023.01.27
[ BOJ / 파이썬 ] 10828 스택  (0) 2023.01.27
[ 백준 ] 1406 에디터  (0) 2023.01.22
[ BOJ / 파이썬 ] 23290 마법사  (0) 2022.10.15