일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 | 31 |
- 자바연산자
- C#변수
- VARIABLE
- SWEA
- 백준파이썬
- 프로그래머스파이썬
- 백준
- 코드업
- 코드업100제자바
- 개발입문
- SWEA파이썬
- 리터럴
- 기초프로그래밍
- 사용자입력
- c#
- 자바클래스
- Codeup
- C#프로그래밍
- 수학연산
- 코드업100제
- 코딩테스트
- Literal
- 알고리즘
- 제어구조
- Algorithm
- Java
- 코드업자바
- 디자인패턴
- 변수
- 자바
- Today
- Total
제니노트
[백준] 9012 괄호 (python) 본문
1) 9012 - 괄호 (python)
문제 출처 : https://www.acmicpc.net/problem/9012
괄호가 정상적으로 짝이맞는지 해결하는 문제. 이는 스택으로 해결함
2) 문제
괄호 문자열(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”를 한 줄에 하나씩 차례대로 출력해야 한다.
3)소스 코드
import sys
def solve() :
data=sys.stdin.readline().rstrip()
stack = [] #스택으로 해결, 빈스택 생성
for item in data : #입력값을 앞에서 부터 하나씩 돌면서 테스트
if item=='(' : #여는 괄호 일 경우
stack.append(item) #스택에 집어넣기
else :
if len(stack) == 0 : # 스택 길이가 0 이라는 것은 유효한 괄호쌍이 아니라는 것
print('NO')
return #종료
else: #스택이 있을 경우
stack.pop() #하나를 뽑아내기
#for 문을 다 돌았을 때 유효한 경우 스택 길이가 0이어야함
if len(stack) == 0 :
print('YES')
else :
print('NO')
t = int(sys.stdin.readline().rstrip())
for _ in range(t) :
solve()
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 1406 에디터 (python) (1) | 2023.05.21 |
---|---|
[백준]1874 스택수열 (python) (0) | 2023.05.21 |
[백준] 9093번 단어뒤집기 (python) (3) | 2023.05.19 |
[백준] 10828번 스택 (python) (2) | 2023.05.19 |
1000번 - A+B [자바] (0) | 2023.01.17 |