선릉역 1번 출구
baekjoon - 9012 본문
def push(vps): stack.append(vps) def pop(): if stack: stack.pop() return 0 return -1 for _ in range(int(input())): stack = [] a = input() k = 0 for i in range(len(a)): if a[i] == '(': push('(') elif a[i] == ')': k += pop() if k != 0 or stack: print("NO") else: print("YES") |
괄호를 열고 닫는 개수가 일치해야 이 문제가 풀린다. 그러나 주의할 점은 ()의 순서여야 한다는 것이다. )(는 안됨
그래서 생각한 것은
1. ()의 순서대로 (의 개수와 )의 개수가 일치할 때 => YES 출력
2. (의 개수가 )보다 많을 때 => stack에 (가 남아있기 때문에 stack을 if문의 조건으로 두어 NO 출력
3. )의 개수가 (보다 많을 때 => pop의 return문을 -1로 두고, 새로운 변수 k를 두어 += 함 그래서 0 이 아니면 )의 개수가 더 많은 것으로 판단함. NO 출력
처음에 k를 += 한게 아니고 그냥 =으로 두고 k가 -1이면 NO를 출력하게 했더니 "(()))()"라는 변수가 들어왔을 때 k의 값이 뒤에서 경신되어 YES로 출력되는 오류가 발생했다. 그래서 +=의 방식을 사용했다.
'Algorithm > Algorithm 문제풀이' 카테고리의 다른 글
baekjoon - 1406 (0) | 2021.08.30 |
---|---|
baekjoon - 1874 (0) | 2021.08.28 |
baekjoon - 9093 (0) | 2021.08.28 |
baekjoon - 10828 (0) | 2021.08.28 |
baekjoon - 재귀 (0) | 2021.08.21 |
Comments