(Swift) 백준 4949 균형잡힌 세상

SteadySlower·2022년 8월 22일
0

Coding Test

목록 보기
129/305

4949번: 균형잡힌 세상

문제 풀이 아이디어

기본적인 stack 문제로 여는 괄호와 닫는 괄호를 짝짓는 문제입니다. 이 포스팅을 참고해주세요.

다만 이 경우의 경우 괄호가 소괄호와 대괄호로 두 가지입니다. 닫는 괄호가 나왔을 때 stack에서 pop한 여는 괄호가 닫는 괄호와 같은 종류의 괄호인지 확인합니다.

코드

// 계속 입력을 받아야 하므로 while true
while true {
    let input = readLine()!
    
    // 입력 종료 조건
    if input == "." { break }
    
    // 괄호를 넣기 위한 stack
    var stack = [Character]()
    
    // 균형 잡힌 문자열인지 저장하는 Bool 변수
    var isBalanced = true
    
    // 각각 문자열을 확인하면서 괄호만 체크
    for char in input {
        // 여는 괄호인 경우 stack에 저장
        if char == "(" || char == "[" {
            stack.append(char)
        } else if char == ")" { //👉 닫는 소괄호인 경우에 stack에서 pop한 것이 여는 소괄호인지 확인
            guard let popped = stack.popLast() else { isBalanced = false; break }
            if popped != "(" { isBalanced = false; break }
        } else if char == "]" { //👉 닫는 대괄호인 경우 stack에서 pop한 겅이 여는 대괄호인지 확인
            guard let popped = stack.popLast() else { isBalanced = false; break }
            if popped != "[" { isBalanced = false; break }
        }
    }
    
    //⭐️ stack에 괄호가 남아 있으면 false
    if !stack.isEmpty { isBalanced = false }
    
    print(isBalanced ? "yes" : "no")
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글