[baekjoon] 균형잡힌 세상

김민서·2024년 1월 9일
0

알고리즘 문제풀이

목록 보기
25/47

링크텍스트

# 균형잡힌 세상
pair = {
    ')' : '(',
    ']' : '['
}
# 입력 종료조건: .
output = []
while True:
    sentence = input()
    if sentence == '.': break
    isWrong = False # 짝이 안맞는 경우
    sentence_stack = []

    for s in (sentence):
        if s == '.':
            continue
        if s == '(' or s == '[':
            sentence_stack.append(s)
            
        elif s == ')' or s == ']':
            if sentence_stack:
                popped = sentence_stack.pop()
                if popped != pair[s]:
                    isWrong = True
                    break
            else: 
                isWrong = True
                break

    # print(sentence_stack, isWrong)
    if len(sentence_stack) == 0 and not isWrong: output.append('yes')
    else: output.append('no')
    
for i in output:
    print(i)

처음에 괄호 사이들의 문장의 알파벳 요소가 존재한다면 반드시 하나를 스택에 넣어줘야 한다고 생각해서(왜 그랬는지 잘 모르겠다.) 살짝 헤맸는데 그냥 괄호짝만 확인하면 되는 문제였다.

문장을 돌면서
1. 열린 괄호나 열린 대괄호가 존재하면 스택에 넣는다.
2. 현재 문자가 닫힌 괄호라면 스택에서 pop을 하고 이게 열린 괄호가 맞는지 확인한다.
(열린 괄호가 아닐 경우 괄호 짝이 맞지 않는 문장이다.)
현재 문자가 닫힌 대괄호라면 스택에서 pop을 하고 이게 열린 대괄호가 맞는지 확인한다.
(열린 괄호가 아닐 경우 괄호 짝이 맞지 않는 문장이다.)
3. 문장을 다 돌고나서
스택에 쌓여있는 것이 아무것도 없다면 괄호들의 짝이 맞는 문장이다.
스택에 무언가 남아있다면 괄호들의 짝이 맞지 않는 문장이다.

0개의 댓글