[알고리즘] Swift - 올바른 괄호(백준9012)

문제

 

· 아이디어💡

 이 문제는 스택으로 풀 수 있는 문제이다. 그러나 이미 많은 라이브러리가 존재하는 C++과 파이썬과는 달리 Swift는 Stack을 사용하려면 40줄 가까운 코드를 따로 써야 한다. 그래서 필요하다면 Stack을 구현하겠지만 구현할 수 없다면 다른 방법으로 푸는 것도 하나의 방법이다. 

 이 문제의 아이디어는 입력받은 문자열의 제일 왼쪽부터 "("인지 ")" 인지 확인해보면서 count를 하고, count 값이 0이 되면 true를 반환, 0이 아니거나 한 번이라도 0 미만으로 내려가면 false를 반환해서 "YES"인지 "NO"인지 프린트를 하면 된다. 

 

· 코드 😵😵‍💫

func sol9012() {
    let total = Int(readLine()!)!
    
    var answer: [Bool] = []
    
    for _ in 1...total {
        let line = readLine()!
        answer.append(check(line))
    }
    
    for i in 0..<total {
        let answerString = answer[i] ? "YES" : "NO"
        print(answerString)
    }
    
    func check(_ line: String) -> Bool {
        var count = 0
        for element in line {
            if element == "(" {
                count += 1
            } else {
                if count <= 0 {
                    return false
                } else {
                    count -= 1
                }
            }
        }
        return count == 0 ? true : false
    }
}

sol9012()

· 시간 복잡도 ⁉️🤔

 위 풀이의 시간 복잡도는 for 문을 한번 사용했기에 O(N)이다.

 

· 고려사항 🌟

 Swift에서는 print를 많이 하면 느려지는 특징이 있다고 한다!! 따라서 의도적으로 Bool값을 모아서 한 번에 출력해 주는 걸 추천한다!

 

 

 

'# 개발 > 알고리즘' 카테고리의 다른 글

[알고리즘] Swift 정렬  (0) 2024.04.25
[알고리즘] Swift - 토마토(백준7576)  (0) 2024.04.21
[알고리즘] Swift - 카드2(백준2164)  (0) 2024.04.16