문제 요약
스택/큐 문제이다. "()()" 식으로 올바른 형태를 가진 괄호일 때만 true를 리턴하고 ")("와 같이 역순이면 false를 리턴해야 합니다.
해답
첫 번째 시도
func solution(_ s:String) -> Bool {
var cnt: Int = 0
for c in s {
if c == "(" {
cnt += 1
} else {
cnt -= 1
}
if cnt < 0 {
return false
}
}
if cnt == 0 {
return true
} else {
return false
}
}
가장 먼저 둔 생각은 이걸 굳이 스택이나 큐로 풀어야 하나? 해서 푼 방식입니다. 하지만 이 방법으로 진행할 시 효율성 테스트 2번째를 통과하지 못합니다.
두 번째 시도
func solution(_ s:String) -> Bool {
var array: [String] = []
for c in s {
if c == "(" {
array.append("(")
} else {
if array.isEmpty {
return false
}
array.removeLast()
}
}
if !array.isEmpty {
return false
}
return true
}
두 번째로 시도해본 방식은 스택에 "("만을 삽입하고 ")"가 오면 바로 들어가 있던 "("를 pop 하는 방식을 사용했습니다. 여기서 배열이 이미 비었을 경우에는 false를 리턴하고 최종적으로 스택이 비지 않았으면 "("와 ")"의 쌍이 맞지 않는 것이므로 false를 리턴하게 했습니다.
풀고 나니 이미 많은 사람들은 첫 번째 방식으로 풀어서 문제를 풀었던데 약간의 리뉴얼이 된 듯합니다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 스위프트] 직사각형 별찍기 (0) | 2022.08.24 |
---|---|
[프로그래머스 스위프트] 타겟넘버 (0) | 2022.08.15 |
[프로그래머스 스위프트] 위장 (0) | 2022.07.31 |
[프로그래머스 스위프트] 콜라츠 추측 (0) | 2022.07.29 |
[프로그래머스 스위프트] 폰켓몬 (0) | 2022.07.27 |