문제
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
괄호("()", "[]")들의 균형이 잘 맞춰져 있는지 판단하는 문제다.
예시
Example 1:
Input: So when I die (the [first] I will see in (heaven) is a score list).
[ first in ] ( first out ).
Half Moon tonight (At least it is better than no Moon at all].
A rope may form )( a trail in a maze.
Help( I[m being held prisoner in a fortune cookie factory)].
([ (([( [ ] ) ( ) (( ))] )) ]).
.
.
Output: yes
yes
no
no
no
yes
yes
풀이
def is_balanced(s):
opener = '(['
closer = ')]'
stack = []
for char in s:
if char in opener:
stack.append(char)
elif char in closer:
if not stack:
return False
top = stack.pop()
if opener[closer.index(char)] != top:
return False
return not stack
while True:
sentence = input()
if sentence == '.':
break
res = is_balanced(sentence)
if res:
print('yes')
else:
print('no')
- 문자열에 여는 괄호가 있으면 스택에 추가하고, 닫는 괄호가 있으면 스택 마지막 문자열을 확인 후 같으면 제거한다.
- 문자열을 모두 순회한 후 스택이 비어있지 않다면 괄호가 짝지어져 있지 않으므로 False를 반환한다.
- 사용자로부터 문장을 입력받고, 온점만 있을 경우 루프를 종료한다.
'알고리즘' 카테고리의 다른 글
[리트코드(LeetCode)] 17번 Letter Combinations of a Phone Number (0) | 2024.01.10 |
---|---|
[백준(BOJ)] 2493번 탑 (0) | 2024.01.09 |
[백준(BOJ)] 15903번 카드 합체 놀이 (0) | 2024.01.09 |
[백준(BOJ)] 2002번 추월 (1) | 2024.01.09 |
[리트코드(LeetCode)] 328번 Odd Even Linked List (0) | 2024.01.08 |