https://www.acmicpc.net/problem/4949
문제 풀이
- 괄호의 종류를 딕셔너리로 저장한다.
- {열린괄호:닫힌괄호}
- 문자열의 문자를 하나씩 순회한다.
- 만약 문자가 공백,알파벳,'.'이면 순회를 건너뛴다.
- 스택을 이용해서 푼다.
solution - 성공
import sys
while True:
s = sys.stdin.readline().rstrip()
# 입력값이 '.'이면 입력을 종료한다.
if s == '.':
break
unit = {'(':')','[':']'}
stack = []
for i in s:
# i가 문자,공백,온점이면 반복을 건너뛴다.
if i.isalpha() or i == ' ' or i == '.':
continue
# 열린 괄호라면 i를 스택에 추가
if i in unit.keys():
stack.append(i)
# 닫힌 괄호라면
else:
if stack: # 빈 스택이 아니면
if unit[stack[-1]] == i: # 괄호의 짝도 맞으면
stack.pop() # 스택의 마지막 요소를 제거
else: # 괄호의 짝이 맞지 않으면 반복문 종료
stack = True
break
else: # 닫힌 괄호고 빈 스택이면 반복문 종료
stack = True
break
if stack : # 스택에 값이 있으면
print('NO')
else: # 빈 스택이면
print('YES')
```
더 생각해보기
- 만약 괄호가 (),[],{},<> 처럼 더 추가되면 괄호 딕셔너리에 추가만 하면 된다.
unit = {'(' : ')', '{':'}','[':']','<': '>'}
'algorithm > 백준' 카테고리의 다른 글
[PYTHON/파이썬] 2738 행렬 덧셈 (0) | 2023.02.09 |
---|---|
[PYTHON/파이썬] 10250 ACM호텔 - zfill() 0으로 자릿수 채우는 법 (0) | 2023.02.09 |
[파이썬/PYTHON] 1251 단어나누기 (0) | 2023.02.08 |
[PYTHON/파이썬] 1436 영화 감독 숌 - 완전탐색 (0) | 2023.02.08 |
[PYTHON/파이썬] 1526 가장 큰 금민수 - while (0) | 2023.02.07 |
댓글