Baekjoon 4949번 균형잡힌 세상

노그리·2022년 5월 1일
0

📑 Algorithm

목록 보기
7/15

💭 문제가 궁금하다면?

내가 시도한 방법

🔴 Pass한 코드

  • 어제 괄호 문제랑 비슷해서 코드는 금방 짰는데... Indexerror가 뜨고...(이건 elif 문에서 stack이 빈 배열인지 아닌지 확인하는 부분을 한번만 적고 싶어서 섣불리 앞으로 뺐다가..빈 배열일 때에도 index접근을 허용해서 발생한 에러였다) 해결했는데 답이 틀렸다고 뜨고.....알고봤더니 소문자로 출력해야했는데 YES, NO로 print를 하고 있었다....ㅎㅎ
  • 그래도 이 문제로 andor를 사용하면서 단축평가를 어떻게 고려해야할 지 연습해보는 기회가 됐다고 생각한다.
def check(words):
    stack = []  # 괄호들이 담길 배열

    # 입력값 순회돌면서 확인하기(다만, 짝이 안맞는 경우가 발견되면 즉시 함수 종료)
    for char in words:

        # 괄호가 아닌 문자인 경우(그냥 pass)
        if char not in '()[]':              
            continue
        
        # 괄호 문자인 경우
        if char in '([':                    # 여는 괄호,
            stack.append(char)              # (무조건) stack에 추가
            
        elif stack and ((char == ')' and stack[-1] == '(') or (char == ']' and stack[-1] == '[')):
            stack.pop()                     # 닫는 괄호면 짝 확인해서 stack에서 삭제(여는 괄호가 삭제됨)
            
        else:
            print('no')                     # 짝이 안맞으면 'no'출력하고
            return                          # 함수 종료

    # 입력값을 다 확인했을 때
    if not stack:                           # 괄호의 짝이 다 맞은 경우
        print('yes')
    else:                                   # 안맞은 경우
        print('no')
    return


import sys

words = sys.stdin.readline().rstrip()

while words != '.':                         # 입력값이 . 일 경우 순회 종료
    check(words)                            # '.'이 아닌 값일 경우 괄호 검사하기
    words = sys.stdin.readline().rstrip()   # 다음 입력값으로 갱신

🔺 IndexError 코드(부분)

  • 완전 처음에 작성한 elif 부분
elif (char == ')' and stack and stack[-1] == '(') or (char == ']' and stack and stack[-1] == '['):
	 stack.pop()
     
👇 

# stack이 중복되서 앞에서 한번에 확인하자라는 생각이 들어서 아래와 같이 바꿨다.
# 그런데 stack 빈 배열일때에도 index 접근을 허용했다.
elif stack and (char == ')' and stack[-1] == '(') or (char == ']' and stack[-1] == '['):
     stack.pop()

👇 

# 최종코드
elif stack and ((char == ')' and stack[-1] == '(') or (char == ']' and stack[-1] == '[')):
            stack.pop() 
     
profile
자기소개가 싫어요

0개의 댓글