파이썬 알고리즘 145번 | [백준 9012번] () - 스택

Yunny.Log ·2022년 5월 6일
0

Algorithm

목록 보기
148/318
post-thumbnail

145. ()

1) 어떤 전략(알고리즘)으로 해결?

  • 스택을 활용해서 ( 를 만나면 쌓고 )를 만나면 그동안 안에 들어있던 것들은 다 pop해주는 방식으로 수행했다.

2) 코딩 설명

<내 풀이>


import sys

save=[]

n=int(sys.stdin.readline())
for i in range(n) : 
    save=[]
    inp = sys.stdin.readline().strip()

    for i in inp:            
        if i=="(":
            save.append(i)                
        elif i==")" : # and len(save)>0 :#얘를 만나면 뽑아내자
            if len(save)>0 : 
                save.pop() # 예외처리 안해주면인덱스 에러,
            else :
                print("NO")
                break
    else : #break 되지 않았으면
        if len(save)==0:
            print("YES")
        else :
            print("NO")

<내 틀렸던 풀이, 문제점>


import sys

save=[]

n=int(sys.stdin.readline())
for i in range(n) : 
    save=[]
    inp = sys.stdin.readline().strip()

    for i in inp:            
        if i=="(":
            save.append(i)                
        elif i==")" : # and len(save)>0 :#얘를 만나면 뽑아내자
            if len(save)>0 : 
                save.pop() # 예외처리 안해주면인덱스 에러,
            else :
                print("NO")
                break
    # else : #break 되지 않았으면
    if len(save)==0:
        print("YES")
    else :
        print("NO")
  • 이렇게 하면 for i in inp에서도 걸리고 for i in inp 를 벗어난 후 들어가게 되는 if-else에서 두번 걸리는 경우가 생겨서 한 경우에 두번의 NO NO 나 NO YES가 출력되었다.
  • for 문을 벗어나지 않는다면 이라는 else를 추가해서 for i in inp 이후의 if~else문을 종속시켜야 한다.

<반성 점>

  • else는 항상 is 가 명시되어있지 않아도 for - else로 작성이 가능하다는 것을 잊지 말자.

<배운 점>

  • for - for에서 break 안 걸린다면 빠져버릴 else도 존재함을 늘 기억하자.

0개의 댓글