안녕하세요. 오늘은 프로그래머스 괄호 회전하기 문제를 풀어보겠습니다.
괄호와 관련된 문제는 대부분 Stack 자료구조를 이용하면 문제를 해결하실수 있습니다.
Stack은 Swift의 배열을 이용해서 append()와 removeLast()만 이용해서 사용하시면 됩니다!
이 문제도 마찬가지로 Stack 자료구조를 이용해서 문제를 풀어보겠습니다!
1. 문자열을 회전시킨다.
var s1 = s[s.index(s.startIndex, offsetBy: i)...s.index(s.endIndex, offsetBy: -1)]
if i != 0 {
s1 += s[s.startIndex...s.index(s.startIndex, offsetBy: i-1)]
}
2. push or pop 결정한다.
var isPop = false
for k in 0..<3 {
if j == popCharacter[k] {
isPop = true
break
}
}
3. push or pop을 한다.
if isPop == true {
if stack.isEmpty == true {
continue rotateLoop
}
if j == "]" {
if stack.last != "[" {
continue rotateLoop
}
}
else if j == ")" {
if stack.last != "(" {
continue rotateLoop
}
}
else if j == "}" {
if stack.last != "{" {
continue rotateLoop
}
}
stack.removeLast()
}
else if isPop == false {
stack.append(j)
}
4. 마지막으로 문자열이 비어서 모든 괄호가 정상적이라면 answer에 1을 더하면 됩니다.
if stack.isEmpty == true {
answer += 1
}
import Foundation
let popCharacter:[Character] = ["}", "]", ")"]
func solution(_ s:String) -> Int {
var answer = 0
var s = s
rotateLoop : for i in 0..<s.count {
var stack:[Character] = [Character]()
var s1 = s[s.index(s.startIndex, offsetBy: i)...s.index(s.endIndex, offsetBy: -1)]
if i != 0 {
s1 += s[s.startIndex...s.index(s.startIndex, offsetBy: i-1)]
}
for j in s1 {
var isPop = false
for k in 0..<3 {
if j == popCharacter[k] {
isPop = true
break
}
}
if isPop == true {
if stack.isEmpty == true {
continue rotateLoop
}
if j == "]" {
if stack.last != "[" {
continue rotateLoop
}
}
else if j == ")" {
if stack.last != "(" {
continue rotateLoop
}
}
else if j == "}" {
if stack.last != "{" {
continue rotateLoop
}
}
stack.removeLast()
}
else if isPop == false {
stack.append(j)
}
}
if stack.isEmpty == true {
answer += 1
}
}
return answer
}
오늘은 여기까지입니다.
궁금하신 점이나 질문이 있으시면 댓글로 남겨주세요~
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 스택/큐 다리를 지나는 트럭 with Swift (0) | 2022.01.22 |
---|---|
[프로그래머스] Summer/Winter Coding(~2018) 배달 with Swift (0) | 2022.01.21 |
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 후보키 with Swift (0) | 2022.01.15 |
[프로그래머스] 2017 팁스타운 예상 대진표 with Swift (0) | 2022.01.12 |
[프로그래머스] 탐욕법(Greedy) 조이스틱 with Swift (0) | 2022.01.11 |