https://programmers.co.kr/learn/courses/30/lessons/76502
괄호 회전하기는 stack/queue 로 분류될 수 있는 전형적인 문제이다.
논리는 정말정말 간단하다.
문자열 하나씩을 돌면서 하나하나를 맨 뒤로 옮긴다.
그렇게 되면 마지막 문자열까지 다 돌았을 때 돌기 전의 시작 상태가 된다.
그러면 모든 경우의 수에 대해 그것이 올바른 괄호 문자열인지 확인을 할 수 있다는 것이고,
그것을 확인하는 부분이 아래의 isBalanced 함수이다.
정답 코드는 다음과 같다.
import Foundation
func isBalanced(_ s: [Character]) -> Bool {
var stack = [Character]()
var dict = [Character:Character]()
dict[")"] = "("
dict["]"] = "["
dict["}"] = "{"
var s = s
stack.append(s.first!)
for i in 1..<s.count {
if dict.values.contains(s[i]) { stack.append(s[i]) } // 여는 괄호는 무조건 Append
else if stack.count != 0 && stack.last! == dict[s[i]] { stack.removeLast() }
else { stack.append(s[i]) }
}
return stack.count == 0 ? true : false
}
func solution(_ s:String) -> Int {
var s = s.map({ $0 })
var answer = 0
for i in 0..<s.count {
var first = s.removeFirst()
s.append(first)
if isBalanced(s) { answer += 1 }
}
return answer
}
'Algorithm' 카테고리의 다른 글
프로그래머스 캐시 [Swift] (0) | 2021.11.17 |
---|---|
[Swift] 프로그래머스 멀쩡한 사각형 풀이 (0) | 2021.10.22 |
Programmers 쿼드압축 후 개수 세기 [Swift] (0) | 2021.09.15 |
프로그래머스 - 최솟값 만들기 [Swift] (0) | 2021.09.15 |
프로그래머스 - 괄호 변환 Swift (0) | 2021.09.07 |
최근댓글