https://www.acmicpc.net/problem/9012
전에 분명 풀었는데 다시 보자니 무척 헷갈렸다.
- 어쨌든, 괄호의 좌우 갯수가 맞는 것이 100% 유효한 것은 아니다.
- 여기에서 좀 걸렸는데, 그럼 둘 중 하나는 완성을 시킬 수 있거나, 없을 때 즉시 유효성 결정을 하는 Trigger로써의 역할을 해야했다.
왜 헷갈렸는지 생각해보니 python에서 string 단위의 입력을 한 글자 단위로 나눠서 수행해본 적이 없다보니 그렇게 할 수 있다는 생각을 못했던 것 같다.
- 나는 일단 이런 식으로 풀었다.
- ) 가 들어오면 따로 카운트를 올린다. 이걸 closingCnt라고 하겠다.
- (가 들어오면 closingCnt의 수가 남아 있는지 확인한다.
- 수가 남아있다면 -1을 하고 다음 내용에 대해 알아본다.
- 수가 남아있지 않다면 유효하지 않으니 종료한다.
- 문자열을 다 돌았는데도 closingCnt가 0이 아니면 이 경우에도 무효하니 종료한다.
- 지나가다 참고자료를 봤는데 오히려 (를 세고, )를 트리거로 쓰는 형태가 예시로 설명되어있더라.
홍대병식 해결을 했으니 좋게 생각하겠다.
import sys
caseCnt = int(sys.stdin.readline())
for i in range(caseCnt):
sliceTarget = sys.stdin.readline()
sliced = list(sliceTarget)
closingCnt = 0
isVPS = True
sliced.pop()
while len(sliced) != 0:
item = sliced.pop()
if (item == ")"):
closingCnt += 1
else:
if(closingCnt == 0):
isVPS = False
break
else:
closingCnt -= 1
if (closingCnt != 0):
isVPS = False
if (isVPS):
print("YES")
else:
print("NO")
'문제풀이' 카테고리의 다른 글
[PY] 2470 : 두 용액 (0) | 2025.03.25 |
---|---|
[PY] 17608 : 막대기 (0) | 2025.03.24 |
[PY] 10773 : 제로 (0) | 2025.03.24 |
[PY] 10828 : 스택 (0) | 2025.03.24 |
[PY] 2110 : 공유기 설치 (0) | 2025.03.24 |