Algorithm

백준 4949번: 균형잡힌 세상 - Swift 풀이

서서리 2024. 3. 25. 02:47
SMALL

오늘의 문제

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

이 문제... https://tobeforest.tistory.com/13 이거랑 문제 내용만 다르지 로직은 똑같다.

날먹 하려고 일부러 한 건 아닌데, 요새 내가 푸는 챕터가 자료구조라서 그렇다. 자료구조 챕터 다 풀면 다음 챕터로 넘어갈 예정. (자료구조가 챕터 1이다.)

그래도 저거 푼 지 며칠 지났는데 친구랑 고민했던 게 인상 깊어서 그런가 로직이 바로 생각나서 바로 풀었다.

 

내 풀이

import Foundation

var stack: [Character] = []

// 온점 나올 때까지 계속 인풋 받기
while true {
    let input = readLine()!
    if input == "." {
        break
    }
    
    // 문자열 하나씩 돌면서 확인
    for target in input {
       // 괄호일 때만
        if target == "(" || target == ")" || target == "[" || target == "]" {
            // stack의 top과 지금 타겟 캐릭터가 쌍이면
            if (stack.last == "(" && target == ")") || (stack.last == "[" && target == "]") {
                // top을 pop
                stack.removeLast()
            } else {
                // 쌍이 아니면 지금 타겟 캐릭터를 스택에 추가 (push)
                stack.append(target)
            }
        }
    }
    
    // 문자열 다 돌고 나서 스택에 남는 괄호가 있으면 쌍이 맞지 않는 게 있다는 뜻 -> no 출력
    // 스택이 비었으면 모든 괄호가 쌍이 있다는 뜻 -> yes 출력
    print(stack.isEmpty ? "yes" : "no")
    // 스택 초기화
    stack.removeAll()
}

스택 자료구조 사용해서 풀면 되고 쉬우니까 설명은 주석으로 대체.

LIST