내 맴

[ BAEKJOON ] No. 4949 균형잡힌 세상 본문

Algorithm/Baekjoon 문제풀이

[ BAEKJOON ] No. 4949 균형잡힌 세상

뺙사우르수 2020. 4. 6. 17:34
728x90

문제 )

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다. 문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다. 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다. 모든 왼쪽 대괄호("[")는 오른쪽 대괄

www.acmicpc.net

 

 

[ 풀이 ]

Stack을 사용해서 문제를 풀어준다

 

< blance Function  > 


1 ) 문장 전체를 for문을 통해 한글자씩 확인 한다
2 ) 
 문장 중에 ' [ ' or ' ( '이 나오면 stack에 집어넣는다 

 문장중에 ' ) '가 나오는 경우 
① ') '가 나왔는데 스택이 비어있으면, 균형이 안맞는다는 뜻이므로  return "no"
② stack의 가장 나중 값이 '( ' 이면 균형이 맞으므로 stack에서 꺼내준다
③ stack의 가장 나중 값이 '( ' 이 아닌 경우 균형이 안맞으므로 return "no"

 문장중에 ']'가 나오는 경우 
① '] '가 나왔는데 스택이 비어있으면, 균형이 안맞는다는 뜻이므로  return "no"
② stack의 가장 나중 값이 '[ ' 이면 균형이 맞으므로 stack에서 꺼내준다
③ stack의 가장 나중 값이 '[ ' 이 아닌 경우 균형이 안맞으므로 return "no"


3 ) 
문장을 다 확인해본 후 
 stack이 비어있다는 것은 균형이 맞는다는 뜻이므로 return "yes" 
 비어있지 않은 경우 균형이 맞지 않으므로 return "no"

 

 

- python code

# 문자열이 균형을 이루는지 확인하는 Fuction
def balance(string):
    stack=[]
    for i in string:
        if i =='[' or i=='(':
            stack.append(i)
            
        elif  i==')':
            if not stack: #스택이 비어있는경우 
                return "no"
            if stack[-1]=='(':
                stack.pop()
            else:
                return "no"

        elif  i==']':
            if not stack:
                return "no"
            if stack[-1]=='[':
                stack.pop()
            else:
                return "no"

    if not stack: 
        return "yes"
    else: 
        return "no"


while True:
    sentence=input()
    if sentence==".": #'.'이 나오면 입력종료
        break
    print(balance(sentence))

 

 

 

728x90

'Algorithm > Baekjoon 문제풀이' 카테고리의 다른 글

[ BAEKJOON ] No. 2164 카드2  (0) 2020.04.09
[ BAEKJOON ] No. 18258 큐2  (0) 2020.04.08
[ BAEKJOON ] No. 9012 괄호  (0) 2020.04.03
[ BAEKJOON ] No. 10733 제로  (0) 2020.04.02
[ BAEKJOON ] No. 10828 스택  (0) 2020.03.31