본문 바로가기
코딩테스트/백준

백준 4949번] 균형잡힌 세상 코드 리뷰

by 신도리아 2022. 10. 4.

문제 소스: https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

 

내가 작성한 코드:

list=[]

while True:
  sentence = input()
  # 종료 조건
  if (sentence=='.'):
    break
  
  list.append(sentence)

# for i in range(len(list)):
#   print(list[i])


for i in range(len(list)):
  stack=[]
  for j in range(len(list[i])):
    if list[i][j] == '(' or list[i][j]=='[':
      stack.append(list[i][j])
      
    elif list[i][j] == ')':
      # 이전에 ( 이 있다면
      if stack and stack[-1] == '(': 
        stack.pop() # ( 삭제
        
    elif list[i][j] == ']':
      # 이전에 [ 이 있다면
      if stack and stack[-1] == '[':
        stack.pop() # [ 삭제
  
  if not stack:
    print('yes')
  else:
    print('no')

 

결과 : 틀렸습니다

 

테스트 케이스는 다 맞는데, 어느 부분에서 틀린지 검토해 봐야함 -221004

 


원인 : 모든 문장을 입력 받은 후 처리가 아닌,

각 문장 당 입력 및 처리였음..

 

그에 따라 2차원에서 1차원 리스트로 코드를 줄였다.

 

개선 코드

 

while True:
  list = input()
  # 종료 조건
  if (list=='.'):
    break

  stack=[]
  for i in list:
    if i == '(' or i=='[':
      stack.append(i)
      
    elif i == ')':
      # 이전에 ( 이 있다면
      if stack and stack[-1] == '(': 
        stack.pop() # ( 삭제
      # 이전에 ( 이 없다면
      else:
        stack.append(i)
        
    elif i == ']':
      # 이전에 [ 이 있다면
      if stack and stack[-1] == '[':
        stack.pop() # [ 삭제
      # 이전에 [ 이 없다면
      else:
        stack.append(i)
  
  if not stack:
    print('yes')
  else:
    print('no')

 


해결 완료

'코딩테스트 > 백준' 카테고리의 다른 글

[백준2178][c++] 미로 찾기  (0) 2023.04.17
[백준10828][c++] 스택  (0) 2023.04.16
[백준17298][c++] 오큰수  (0) 2023.04.16
[백준1159][c++] 농구 경기  (0) 2023.04.14
[백준10988][c++] 팰린드롬인지 확인하기  (0) 2023.04.14