균형잡힌 세상 [ Python ] [ 백준 : 4949 ]
2023. 5. 27. 21:48ㆍ알고리즘/백준
풀이 및 회고
오랜만에 문제이해가 쉬웠으나 푸는건 어려웠던 문제였다.
괄호 짝이 맞는지 찾는 문제인데 처음에 딕셔너리를 사용하려했다가 아닌거 같아 포기하고 if 로 조건을 걸어서 풀었다.
3시간씩걸릴 문제가 아니겠지만 풀면서 노트에 적어서 반복문이 어떻게 돌아가는지 적어가면서 잘못되면 수정하는 방식으로 풀었다.
다 제출하고 난 다음 다른사람의 코드를 살펴봤는데 처음에 포기했던 딕셔너리를 사용하는 방식이 눈에 들어왔다.
포기한게 아쉬웠고 이렇게보면 안되는게 없는 것 같다. 포기하지말자
# 균형잡힌 세상
# 1. 문자열 입력받기
# 2. 괄호만 리스트에 넣는다.
# 3. 반복문을 통해 검증한다.
# 4. 출력한다.
# ((((
import sys
while True:
s = sys.stdin.readline().rstrip()
stack = []
# 스택이 비어있으면 yes 아니면 no
# ([)] 입력시
# stack = ["(", "["]
# ["(", "[", ]
# []()
# stack = ["[", ""]
#
if s == '.':
break
for i in s:
if i == '(' or i == '[':
stack.append(i)
elif i == ']':
# 스택이 비어있지 않고 마지막 값이 [ 일때 빼고
if stack and stack[-1] == '[':
stack.pop()
# 스택이 비어있고 마지막 값이 ] 일때 넣기
else:
stack.append(i)
elif i == ')':
# 스택이 비어있지 않고 마지막 값이 ( 일때 빼고
if stack and stack[-1] == '(':
stack.pop()
# 스택이 비어있고 마지막 값이 ] 일때 넣고
else:
stack.append(i)
else:
continue
if not stack:
print('yes')
else:
print('no')
# 민승님 코드 =======================
# while True:
# stack = []
# 괄호_dict = {
# ')' : '(',
# ']' : '[',
# }
# success = True
# string = input()
# if string == ".":
# break
# for str in string:
# if str in 괄호_dict:
# if stack and stack[-1] == 괄호_dict[str]:
# stack.pop()
# else:
# print('no')
# break
# elif str == '(' or str == '[':
# stack.append(str)
# else:
# if stack:
# print('no')
# else:
# print('yes')
# 다른 사람이 푼 코드
# import sys
# while True:
# line = sys.stdin.readline().rstrip()
# if line == '.':
# break
# # 스택 생성
# stack = []
# # {닫는괄호 : 여는괄호} 형식으로 사전 생성
# dict = {')' : '(', ']' : '['}
# # 결과
# result = "yes"
# # 문자 검색
# for char in line:
# # 열린 괄호라면
# if char in '([':
# # 스택에 추가
# stack.append(char)
# # 닫힌 괄호라면
# if char in ')]':
# # 스택에 열린 괄호가 없다면
# if (len(stack) == 0):
# result = "no"
# break
# else:
# # 스택의 TOP과 짝이 맞지 않는다면
# if (dict[char] != stack.pop()):
# result = "no"
# break
# # 스택에 열린 괄호가 남아있다면
# if (len(stack) > 0):
# print("no")
# else:
# print(result)
'알고리즘 > 백준' 카테고리의 다른 글
숫자 카드 2 [ Python ] [ 백준 : 10816 ] (1) | 2023.05.28 |
---|---|
수 찾기 [ Python ] [ 백준 : 1920 ] (0) | 2023.05.28 |
스택 수열 [ Python ] [ 백준 : 1874 ] (1) | 2023.05.27 |
약수 [ Python ] [ 백준 : 1037 ] (0) | 2023.05.27 |
요세푸스 문제 0 [ Python ] [ 백준 : 11866 ] (0) | 2023.05.26 |