Python3/백준 알고리즘
2022.02.24 [백준] (python 파이썬) 균형잡힌 세상
ian's coding
2022. 2. 24. 20:48
728x90
반응형
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
풀이
이 문제는 스택을 사용해서 해결했다.
입력받은 문자열을 배열에 넣고 만약 배열의 첫번째 인덱스 값이 '.'이면 break를 걸어 while문을 빠져나오게 했다. 그리고 check를 True로 선언하고 만약 괄호의 짝이 맞지 않으면 ( ')'괄호가 나왔을 때, stack이 비어있거나 '[' 괄호가 나오면 짝이 맞지 않음) False로 바꾼뒤 break를 걸어 해당 문자열을 확인하는 while문을 빠져나왔다.
그리고 '('괄호나 '['괄호가 나오면 stack에 추가해주었다.
만약 나오는 값이 괄호가 아니면 continue로 넘어가 주었다.
출력할 때, stack이 비어있어도 check가 False면 짝이 맞지 않기 때문에 if의 조건을 not stack and check로 해주었다.
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
|
while True:
s=list(input())
if s[0]=='.':
break
stack=[]
check=True
while s:
a=s.pop(0)
if a=='(':
stack.append(a)
elif a=='[':
stack.append(a)
elif a==')':
if stack and stack[-1]=='(':
stack.pop()
else:
check=False
break
elif a==']':
if stack and stack[-1]=='[':
stack.pop()
else:
check=False
break
else:
continue
if not stack and check:
print('yes')
else:
print('no')
|
cs |
728x90
반응형