Algorithm
프로그래머스 괄호 회전하기 [Swift]
최강훈
2021. 11. 17. 10:47
https://programmers.co.kr/learn/courses/30/lessons/76502
코딩테스트 연습 - 괄호 회전하기
programmers.co.kr
괄호 회전하기는 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
}