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==")" :
if len(save)>0 :
save.pop()
else :
print("NO")
break
else :
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==")" :
if len(save)>0 :
save.pop()
else :
print("NO")
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도 존재함을 늘 기억하자.