728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/12909?language=swift
카카오 괄호 변환 문제와 아주 조금 겹치는 부분이 있다.
(괄호가 올바른지 아닌지 판단하는 부분)
https://programmers.co.kr/learn/courses/30/lessons/60058?language=swift
아무튼 괄호는 "("로 열어주고 ")"로 닫아줘야 올바르다고 판단한다.
하지만 괄호를 규칙적으로 ()처럼만 쓰지는 않는다. (())() 이런 식으로도 사용하기도 한다. 쌍이 잘 맞는지 확인하는 것이 중요하다.
"("를 +1, ")"를 -1로 생각해보면 처음부터 끝까지 더한다면 최종 값은 0이 되어야 올바른 괄호라고 판단할 수 있다.
하지만 이 경우도 예외는 있는데, ")(()"처럼 거꾸로 된 경우에 문제가 된다.
이를 방지하기 위해 도중에 합이 0보다 작아지는 경우는 바로 올바르지 않다고 판단해준다. 즉 거꾸로 된 괄호가 많은 것을 선별해낼 수 있는 것이다.
위 케이스들을 고려해서 코드로 작성해보면 다음과 같다.
import Foundation
func solution(_ s:String) -> Bool {
// 올바른지 여부를 체크
var state = true
// 괄호의 연산 값
var res = 0
for bracket in s {
// 도중에 합이 0보다 작아질 경우 )가 (보다 많아지는 상황
if res < 0 {
state = false
break
}
// "(" 이라면 +1, ")"일 경우 -1
res += bracket == "(" ? 1 : -1
}
// 최종적으로 0보다 크다면 (가 남는 상황인 것
if res != 0 {
state = false
}
return state
}
그리 어렵지는 않은 문제! 2단계 같지는 않다! (다른 2단계 문제들에 비하면...)
끄읕
728x90
반응형