새벽까지

[Silver IV] 괄호 - 9012

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

성능 요약

메모리: 31388 KB, 시간: 48 ms

분류

자료 구조, 문자열, 스택

문제 설명

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.

여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.

입력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.

출력

출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다.

🔑 Solution 🔑

T = int(input())

for i in range(T):
    stack=[]
    target = input()
    for j in target :
        if j == '(' :
            stack.append(j)
        elif j == ')' :
            if len(stack) != 0:
                stack.pop()
            else :
                print("NO")
                break
    else :
        if len(stack) == 0:
            print("YES")
        else :
            print("NO")

 

 

스택을 이용하면 쉽게 풀 수 있습니다.!!

 

  1. 첫 줄에서 입력받을 테스트 케이스의 수 T를 입력받습니다.
  2. for 루프를 이용하여 T번의 테스트를 반복합니다.
    1. stack이라는 이름의 빈 리스트를 만듭니다.
    2. target 변수에 입력받은 문자열을 저장합니다.
  3. for 루프를 이용하여 target 문자열의 각 문자를 하나씩 반복합니다.
    1. 만약 현재 문자가 '('인 경우
      stack에 현재 문자를 추가합니다.
    2. 만약 현재 문자가 ')'인 경우
      stack이 비어있지 않은 경우에는 stack에서 마지막에 추가된 '('를 제거합니다.
      stack이 비어있는 경우에는 "No"를 출력하고 for 루프를 종료합니다.
  4. for 루프가 정상적으로 종료되었다면, stack이 비어있는지 확인합니다.
    1. stack이 비어있는 경우에는 "Yes"를 출력합니다
      stack이 비어있지 않은 경우에는 "No"를 출력합니다.

 

 

https://github.com/SeokJuGo/Studing_CodingTest/tree/main/%EB%B0%B1%EC%A4%80/Silver/9012.%E2%80%85%EA%B4%84%ED%98%B8

 

GitHub - SeokJuGo/Studing_CodingTest: CodingTestPractice

CodingTestPractice. Contribute to SeokJuGo/Studing_CodingTest development by creating an account on GitHub.

github.com

 

profile

새벽까지

@GoS

좋아요❤️ 구독👍🏻 감사합니다!