본문 바로가기

알고리즘, 문제 풀이기록

#24: 괄호

https://www.acmicpc.net/problem/9012

T = int(input())
for _ in range(T):
    P = input()
    ls = list(P)
    sum = 0
    for i in ls:
        if i == '(':
            sum += 1
        elif i == ')':
            sum -= 1
        if sum < 0:
            print("NO")
            break
    if sum > 0:
        print("NO")
    elif sum == 0:
        print("YES")

답안을 참조해가며 일단 완성시킨 코드이다.

1. sum = 0 을 for문 안에 위치시켜야 한다.

2. for문 안의 세번째 if문이 핵심이라 생각한다. 문제가 스택으로 분류되있었는데 이 세줄에서 그 이유를 알 수 있다. '선형성'을 이해해야 한다 생각한다. 괄호는 '(' -> ')' 순으로 진행된다. 즉 시작 괄호 없이 끝 괄호가 먼저 나오게 되면 돌이킬 수 없게 된다. 이것이 sum < 0일 때로, 바로 print("NO")한 뒤 break를 걸어줘야 한다.

3. 중요하지 않은 것일 수도 있는데,  for문의 if-elif-if 구조도 익혀둬야 한다.

 

추후 다시 돌아와서 처음부터 끝까지 답안 참조없이 코딩해보기로 하자.

'알고리즘, 문제 풀이기록' 카테고리의 다른 글

#26: 이항계수  (0) 2021.06.22
#25: 최소공배수  (0) 2021.06.21
#23: 제로  (0) 2021.06.21
#22 스택  (0) 2021.06.21
알고리즘 주간 #21 나무 자르기  (0) 2021.06.21