프로그래밍/코딩테스트

[프로그래머스] 올바른 괄호 / Swift

turu 2021. 5. 25. 16:33

[문제 보기]

더보기
  • 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
    • "()()" 또는 "(())()" 는 올바른 괄호입니다.
    • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
    '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
  •  제한사항
    • 문자열 s의 길이 : 100,000 이하의 자연수
    • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

    입출력 예
    "()()" true
    "(())()" true
    ")()(" false
    "(()(" false

 

https://programmers.co.kr/learn/courses/30/lessons/12909

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은

programmers.co.kr

 


정확성 뿐만 아니라 효율성도 체크하는 문제여서 신기했다.

스택을 사용할 때 실제 값을 계속 넣고 빼는 방식이 아닌 몇개 있는지만 저장하는 방식으로,

그리고 반복문에서 올바른 괄호가 아닌게 확실할 때는 끝까지 계속 판별하지 않도록 했다.

 

import Foundation

func solution(_ s:String) -> Bool
{
    let arr = Array(s)
    var ans = true
    var stack = 0
    
    for element in arr {
        if element == "(" {
            stack += 1
        } else {
            if stack == 0 {
                ans = false
                break
            } else {
                stack -= 1
            }
        }
    }
    
    if stack > 0 {
        ans = false
    }
    
    return ans
}

반응형