알고리즘/백준[baekjoon]
[baekjoon] 백준 4949번 : 균형잡힌 세상 (by python 파이썬)
코딩하는이씨
2022. 4. 6. 23:45
728x90
반응형
`https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
정답 code
while True:
s = input()
if s == '.':
break
stack = []
for i in s:
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')
Problem
처음 풀던 코드
#균형잡힌 세상
while True:
s = input()
if s == '.':
break
small = True
big = True
scount = 0
bcount = 0
for i in s:
if i == '(':
scount += 1
elif i == ')':
scount -=1
if scount <0:
small = False
break
if i == '[':
bcount += 1
elif i ==']':
bcount -= 1
if bcount <0:
big = False
break
if small == False or big == False:
print('no')
elif scount == 0 and bcount == 0:
print('yes')
처음엔 이런식으로 총 괄호 갯수를 세서 풀었는데 문제가 있었다.
예제입력중 아래와 같은 경우에서
Help( I[m being held prisoner in a fortune cookie factory)].
마지막 열린괄호를 먼저 닫지 못하여
no가 나와야하는데 yes가 나오는 것이였다.
괄호를 소괄호 대괄호 따로 계산하다보니 위와같은 입력에서는 제대로 판단하지 못하였다.
따라서 리스트를 이용해 다시 풀게 되었다.
solution
1 . 괄호가 열리면 리스트에 해당 괄호를 추가해준다.
2. 소괄호 or 대괄호가 나온다면 리스트에 입력된게 있고 마지막으로 열린괄호와 동일하면 해당 괄호의 짝을 제거한다.
3. 괄호의 짝이 맞지 않는다면 해당 값을 리스트에 추가한다.
4. 문자열을 돌고나서 리스트의 길이가 0이라면 yes를 아니라면 no를 출력한다.
728x90
반응형