(Swift) 백준 9012 괄호

SteadySlower·2022년 6월 6일
0

Coding Test

목록 보기
57/305

9012번: 괄호

Stack 활용하기

해당 문제는 순서가 존재하는 (여는 괄호 먼저, 닫는 괄호 나중에) 쌍을 매칭시켜서 순서와 갯수를 모두 확인하는 문제입니다.

이런 문제는 stack을 활용해서 먼저 오는 괄호를 push, 나중에 오는 괄호를 pop하는 방식을 통해서 순서와 갯수가 맞는지 모두 확인할 수 있습니다.

//✅ valid한 괄호문자인지 확인하는 함수
func isVPS(_ ps: String) -> Bool {
    var stack = [Int]() //👉 array로 stack을 구현
    let psArray = ps.map { String($0) } //👉 char 하나하나를 String으로 바꾸어 준다.
    // 각 괄호를 순환하면서
    for p in psArray {
        if p == "(" { //👉 여는 괄호일 때 stack에 push한다.
            stack.append(0)
        } else { //👉 닫는 괄호일 때
            if !stack.isEmpty {
                stack.popLast() //👉 stack이 비어있지 않다면 pop (닫는 괄호가 더 많음)
            } else {
                return false //👉 stack이 비어있다면 valid하지 않으므로 false를 리턴
            }
        }
    }
    
    // 각 괄호를 모두 순환한 이후에
    if !stack.isEmpty { //👉 stack이 비어있지 않다면 (여는 괄호가 더 많음) false를 리턴
        return false
    } else { // 👉 stack이 비어 있다면 true를 리턴
        return true
    }
}

let T = Int(readLine()!)!

for _ in 0..<T {
    let ps = readLine()!
    print(isVPS(ps) ? "YES" : "NO")
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글