본문 바로가기
Algorithm/스택&큐&덱&힙

[백준] 4949번 균형잡힌 세상

by HANNI하니 2023. 1. 16.

사용 언어 - Python3

4949번: 균형잡힌 세상 (실버4)

문제 LG 전자 21년 코테랑 유사

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

 

정답

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")

레퍼런스

  • 정답 참고
 

백준 4949번 균형잡힌 세상 - Python

https://www.acmicpc.net/problem/4949입력된 문장에 소괄호("()")와 대괄호 ("\[]")가 균형이 잘 맞는지 yes or no 로 출력하는 문제이다.이번 문제에서는 스택을 사용하면 된다.역시 개념을 모를 땐, 구글링과

velog.io

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

'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

댓글