728x90
https://www.acmicpc.net/problem/4949
저는 stack을 이용하여 구현하였습니다.
2023.12.16 - [코딩테스트 문제] - [프로그래머스/Python] 올바른 괄호
의 상위 버전입니다.
1. 무한 반복문을 사용하고, '.'이 들어오면 break
2. 들어온 문자열 중 ()[] 만 남긴다
3. no가 되는 상황에 대한 함수 작성
no 가 되는 상황
1. stack에 ')' 나 ']' 가 먼저 들어온다
2. '(' 이 들어왔는데 ']' 가 먼저 닫힌다 / '[' 이 들어왔는데 ')' 가 먼저 닫힌다
3. 모든 괄호가 닫히지 않았다
무한 반복문 처리와 ()[]만 남기는 코드
while True:
st = input()
if st == '.':
break
# ()[]만 남긴다
data = ''
for s in st:
if s in set(['(', ')', '[', ']']):
data += s
no와 yes를 리턴하는 함수
stack에 '(' 와 '[' 만 append 한다.
def sm(data):
last = []
for d in data:
if d == '(':
last.append('(')
elif d == ')':
# stack에 아무것도 없는데 )
if len(last) == 0:
return 'no'
# [ 이 들어왔는데 ) 가 나온다
v = last.pop()
if v == '[':
return 'no'
elif d == '[':
last.append('[')
elif d == ']':
# stack에 아무것도 없는데 ]
if len(last) == 0:
return 'no'
# ( 이 들어왔는데 ] 가 나온다
v = last.pop()
if v == '(':
return 'no'
if len(last) == 0:
return 'yes'
else: # stack에 ( 나 [ 가 남아있다
return 'no'
while True:
st = input()
if st == '.':
break
# ()[]만 남긴다
data = ''
for s in st:
if s in set(['(', ')', '[', ']']):
data += s
print(sm(data))
실패 이유
1. stack으로 구현하지 않고 small과 big 변수를 따로 나누어서 사용해서 no가 되는 상황 2번 조건을 만족하지 못했다.
2. 마지막에 모든 괄호가 닫혔는지 length를 확인하는 코드를 안넣었다.
'코딩테스트 문제' 카테고리의 다른 글
[백준/Python] 잃어버린 괄호 (1) | 2024.09.11 |
---|---|
[백준/Python] 최대공약수와 최소공배수 (0) | 2024.09.11 |
[백준/Python] 소수 구하기 (0) | 2024.09.09 |
[Python] 이진 탐색 (0) | 2024.09.08 |
[백준/Python] 동전 0 (0) | 2024.09.07 |