Home 괄호 - baekjoon 9012번
Post
Cancel

괄호 - baekjoon 9012번

9012. 괄호

N개의 입력으로 주어진 문자열이 VPS인지 아닌지를 판단하여 결과를 YES와 NO로 나타내야한다.

  • VPS: ‘( )’와 같이 한 쌍의 괄호로 이루어진 문자열

접근 방법

  1. 열린 괄호는 스택에 쌓는다.
  2. 닫힌 괄호가 나오면 스택에서 꺼낸다.
  3. 스택이 비어있는데, 닫힌 괄호가 나오면 잘못된 VPS이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
N = int(input())

dataList = []
for _ in range(N):
    dataList.append(input())

for data in dataList:
    stack = []
    for char in data:
        # 1. 열린 괄호는 스택으로
        if char == "(":
            stack.append(char)
        elif char == ")":
            # 3. 잘못된 VPS
            if not stack:
                stack.append(char)
                break
            # 2. 옳바른 VPS
            pair = stack.pop()
            if char==')' and pair=='(':
                continue
    
    if not stack:
        print("YES")
    else:
        print("NO")

다른 풀이

스터디에서 발표해주신 팀원분이 for - else를 사용한 풀이가 있다고 말해주었다. for-else는 처음 들었는데 되게 유용한것 같았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
T = int(input())

for i in range(T):
    stack = []
    a=input()
    for j in a:
        if j == '(':
            stack.append(j)
        elif j == ')':
            if stack:
                stack.pop()
            else: # 스택에 괄호가 없을경우 NO
                print("NO")
                break
    else: # break문으로 끊기지 않고 수행됬을경우 수행한다
        if not stack: # break문으로 안끊기고 스택이 비어있다면 괄호가 다 맞는거다.
            print("YES")
        else: # break안 걸렸더라도 스택에 괄호가 들어있다면 NO이다.
            print("NO")

# 출처 https://wookcode.tistory.com/49

for - else란?

for - else 구문은 루프가 완전히 종료되었을 때만 실행되며, 루프가 break 문을 통해 조기에 종료되지 않는 한 실행된다. 이것은 특정 조건이 충족되거나 루프에서 원하는 항목을 찾았을 때 추가 작업을 수행하려는 경우에 유용하다.

1
2
3
4
5
6
7
8
9
10
fruits = ['apple', 'banana', 'date']

for fruit in fruits:
    if fruit == 'cherry':
        print('Cherry found!')
        break
else:
    print('Cherry not found.')
	
# 결과: Cherry not found.