Where who wants to meet someone

백준 Swift [9012] 괄호 본문

백준 알고리즘 문제 기록/스택, 큐, 덱

백준 Swift [9012] 괄호

Lust3r 2023. 8. 22. 15:38
728x90

난이도

실버 IV

 

문제

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

내 답안

var vpsStack = [String]()

var vpsCount = 0

func test(with arr: [String]) -> String {
    vpsStack.removeAll()
    vpsCount = 0

    for i in arr.indices {
        vpsStack.append(arr[i])

        if arr[i] == "(" {
            vpsCount += 1
        } else {
            vpsCount -= 1
        }

        if vpsCount == -1 {
            return "NO"
        }
    }

    return vpsCount == 0 ? "YES" : "NO"
}

for _ in 1...Int(readLine()!)! {
    let input = readLine()!.map { String($0) }

    print(test(with: input))
}
  • 1) 괄호를 담을 vpsStack과 짝이 맞는지를 카운팅할 vpsCount 프로퍼티를 생성
    2) 입력받은 input을 가지고 test 메서드를 수행
    3) test 메서드에서는 vpsStack과 vpsCount를 초기화
    4) for문을 돌며 각 요소를 stack에 추가하는데, 여는 괄호라면 count를 1 증가시키고, 닫는 괄호라면 1 감소시키는 조건문을 사용하여 짝이 맞는지 확인을 해주었고, count가 -1이라면(여는 괄호가 없이 닫는 괄호가 나온 경우) VPS가 될 수 없으므로 바로 NO를 반환해주었다
    5) -1이 아닌 경우에는 count를 확인하여 0이면(짝이 맞으면) YES를, 0이 아니면(짝이 맞지 않으면) NO를 반환하였다.