본문 바로가기
백준

[백준] 9012번 : 괄호 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 2.
728x90
반응형

 

 

9012번: 괄호

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

  1. sys.stdin.readline() 함수를 사용하기 위해 제일 위에 sys 라이브러리를 불러온다. import sys
  2. 전체 테스트 케이스 횟수를 입력받는다. T = int(sys.stdin.readline())
  3. 테스트 케이스 횟수만큼 반복한다. 반복문의 변수가 필요 없을 땐 _를 사용할 수 있다. for _ in range(T)
  4. 판별할 문자열을 마지막 enter 입력을 제외하고 입력받는다. string = sys.stdin.readline().rstrip()
  5. 괄호를 넣어줄 공백 리스트를 생성한다. li = list()
  6. 결과를 저장할 변수를 생성하고 True로 초기화해 준다. result = True
  7. 입력받은 문자열의 문자를 하나씩 추출한다. for i in string
  8. 만약 추출한 원소가 여는 괄호이면 if (i == '(')
  9. 리스트에 추출한 요소를 추가한다. li.append(i)
  10. 반면에 추출한 원소가 닫는 괄호이면 else
  11. 우선 리스트가 비어있는지 확인한다. if (len(li) == 0)
  12. 만약 리스트가 비어있는데 닫는 괄호가 나온다면 올바르지 않은 문자열이다. result = False
  13. 올바르지 않은 문자열이기 때문에 반복문을 종료한다. break
  14. 리스트가 비어있지 않다면 리스트의 원소 하나를 제거한다. li.pop()
  15. 반복문 종료 후, 결과가 True이고 리스트 또한 공백 리스트이면 if (result and len(li) == 0)
  16. 올바른 문자열이다. print('YES')
  17. 반면에 결과가 False이거나 공백 리스트가 아니면 else
  18. 올바르지 않은 문자열이다. print('NO')
반응형

3. 소스코드

import sys

T = int(sys.stdin.readline())

for _ in range(T):
    string = sys.stdin.readline().rstrip()

    li = list()
    result = True

    for i in string:
        if (i == '('):
            li.append(i)
        else:
            if (len(li) == 0):
                result = False
                break

            li.pop()

    if (result and len(li) == 0):
        print('YES')
    else:
        print('NO')

 

4. 다른 풀이

  1. sys.stdin.readline() 함수를 사용하기 위해 제일 위에 sys 라이브러리를 불러온다. import sys
  2. 전체 테스트 케이스 횟수를 입력받는다. T = int(sys.stdin.readline().rstrip())
  3. 테스트 케이스 횟수만큼 반복한다. 반복문의 변수가 필요 없을 땐 _를 사용할 수 있다. for _ in range(T)
  4. 판별할 문자열을 입력받는다. string = sys.stdin.readline().rstrip()
  5. 괄호의 개수를 저장할 변수를 생성하고 초기화해 준다. count = 0
  6. 입력받은 문자열의 문자를 하나씩 추출한다. for i in string
  7. 만약 추출한 원소가 여는 괄호이면 if (i == '(')
  8. 괄호의 개수를 1 증가시켜 준다. count += 1
  9. 반면에 추출한 원소가 닫는 괄호이면 else
  10. 괄호의 개수를 1 감소시켜 준다. count -= 1
  11. 만약 괄호의 개수가 음수가 된다면 if (count < 0)
  12. 올바르지 않은 문자열이므로 반복문을 종료한다. break
  13. 반복문 종료 후, 괄호의 개수가 0이 아니면 if (count != 0)
  14. 올바르지 않은 문자열이다. print('NO')
  15. 반면에 괄호의 개수가 0이면 else
  16. 올바른 문자열이다. print('YES')

 

import sys

T = int(sys.stdin.readline().rstrip())

for _ in range(T):
    string = sys.stdin.readline().rstrip()

    count = 0
    for i in string:
        if (i == '('):
            count += 1
        else:
            count -= 1
            if (count < 0):
                break
            
    if (count != 0):
        print('NO')
    else:
        print('YES')
728x90
반응형