사용 언어 - Python3
4949번: 균형잡힌 세상 (실버4)
문제 ★LG 전자 21년 코테랑 유사★
정답
Stack 문제 !!
내 풀이는 오답이다.
1. 나는 스택은 전혀 생각하지 못함.
2. 특정 조건문을 만족했을 때 오류가 나지 않을 경우로 처리하려고 했다. try except else
3. '(' 다음에 ']'이 오면 오류라는 것을 몰랐다. 괄호가 닫히기만 하면 정답인 줄 알았다. 문제 이해를 잘못했다. 문제의 마지막 조건인 괄호 사이에 있는 문자열도 균형이 잡혀야 한다는 말이 그 뜻이었다.
# 내 정답 - 틀렸지만 사고과정 기록
ans = 0
while True:
A = list(input())
try: #대괄호
A.index("[") or A.index("]")
except: #대괄호 있는 경우
try:
A.count("[") == A.count("]") and A.index("[") < A.index("]")
except: #대괄호 있으면서 조건 만족시
ans += 1
try: #소괄호
A.index("(") or A.index(")")
except: #소괄호 있는 경우
try:
A.count("(") == A.count(")") and A.index("(") < A.index(")")
except: #소괄호 있으면서 조건 만족시
ans += 1
#괄호 조건 만족시 yes 프린트
if ans >= 2:
print("yes")
else:
print("no")
ans = 0
if A == ".":
break
(정답 풀이) 조건을 불만족한 경우만 스택에 남겨두는 형태
1. 괄호의 시작값 ( or [ 가 있으면 stack에 저장한다.
2. ) 가 있을 때 stack이 한개 이상 값이 있고, 마지막 값이 ( 라면, ( ) 조건 만족하여 스택에 저장되있는 ) 를 pop으로 없애준다.
3. 2번과 같은 방법으로 [] 괄호를 조사해준다.
4. 스택이 모두 pop 되어 남아있는 개수가 없다면 모든 조건을 만족했으므로 yes 출력. 한개라도 있으면 no를 출력한다.
while True:
a = input()
stack = []
if a == ".":
break
for i in a:
if i == "(" or i =='[':
stack.append(i)
elif i == ')':
if len(stack)!=0 and stack[-1] == "(":
stack.pop()
else:
stack.append(i)
break
elif i == ']':
if len(stack)!=0 and stack[-1] == "[":
stack.pop()
else:
stack.append(i)
break
if len(stack) == 0:
print("yes")
else:
print("no")
레퍼런스
- 정답 참고
- 정답 깃허브
'Algorithm > 스택&큐&덱&힙' 카테고리의 다른 글
[백준] 1874번 스택 수열 (0) | 2023.01.20 |
---|---|
[백준] 9012번 괄호 (0) | 2023.01.20 |
[백준] 10773번 제로 (0) | 2023.01.20 |
[백준] 10828번 스택 (0) | 2023.01.20 |
[백준] 1406번 에디터 (0) | 2023.01.16 |
댓글