괄호 문제는 스택을 사용하여 해결할 수 있습니다
스택 대신 Int 로 해결
분명 스택을 구현하여 해결할 수 있지만 배열에 값을 넣었다 빼는 것은 효율성이 떨어질 수 있습니다.
그렇기 때문에 문자열의 길이가 크게 주어지는 조건인 경우 Int 를 사용하는 것이 정답이 될 수 있겠습니다.
개선 전 코드
아래처럼 복잡하게 코드를 만드는 방법도 분명 가능한 코드이지만 더 나은 코드들도 존재합니다.
import Foundation
func solution(_ s:String) -> Bool
{
var ans:Bool = false
var left = 0
var right = 0
for (index, value) in s.enumerated() {
if value == "(" {
left += 1
}
while left > 0 && right > 0 {
left -= 1
right -= 1
}
if value == ")" && left > 0 {
right += 1
} else if value == ")" && left == 0 {
ans = false
break
}
while left > 0 && right > 0 {
left -= 1
right -= 1
}
if left == 0 && right == 0 && index == s.count-1 {
ans = true
break
}
}
return ans
}
더 개선된 코드
'(' 가 스택에 추가되고
')' 가 스택에 추가될 때
'(' 의 수가 ')' 보다 항상 많아야 정상적인 괄호 조건을 성립하게 됩니다.
그렇기 때문에 그런 조건을 생각하면 left < right 조건문일 때는 false 를 반환하도록 하는 것 입니다.
만약 해당 조건을 다 성립했을 때 '(' 의 개수와 ')' 의 개수가 같다면 true 결과값을 반환하게 됩니다.
import Foundation
func solution(_ s:String) -> Bool
{
var ans:Bool = false
var left = 0
var right = 0
for value in s {
switch value {
case "(":
left += 1
case ")":
right += 1
default:
break
}
if left < right {
break
}
}
ans = left == right
return ans
}
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 - JadenCase 문자열 만들기 feat. stack (0) | 2024.10.14 |
---|---|
프로그래머스 - 최솟값 만들기 (0) | 2024.10.13 |
프로그래머스 - 메뉴 리뉴얼 feat. dfs (0) | 2024.10.08 |
프로그래머스 - k진수에서 소수 개수 구하기 (0) | 2024.10.05 |
프로그래머스 - 튜플 (0) | 2024.10.05 |