728x90
[Swift] 프로그래머스 괄호 회전하기(lv. 2)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/76502
2. 접근
괄호가 소, 중, 대괄호 모두 등장하는 괄호문제이다.
올바른 괄호인지를 물어보는 것이 아니라, 문자열을 회전시키면서 그것이 올바른 괄호인지를 판별하고, 그 개수를 리턴해야 하는 문제이다.
문자열의 길이만큼 반복문을 필수적으로 돌아야 하고, 한 번의 반복마다 그 괄호가 올바른지 판별해야 하므로 이중 반복문을 사용해야 할 것 같았다. 그래서 아래 코드에 보면 회전을 시키는 조건문을 먼저 두었다.
stack에는 괄호를 하나씩 넣고, leftBracket과 rightBracket 배열을 활용하여 서로 인덱스가 같은 괄호이면 remove, 아니면 append를 하는 방식으로 올바른 괄호인지를 판별하게 하는 로직을 구현했다.
최종적으로 answer에는 올바른 괄호 문자열의 개수가 들어 있을 것이고, 그것을 리턴하면 정답을 얻을 수 있다.
3. 코드
import Foundation
func solution(_ s:String) -> Int {
let leftBracket: [Character] = ["[", "(", "{"]
let rightBracket: [Character] = ["]", ")", "}"]
var answer = 0
var innerS = Array(s)
for i in 0 ... s.count - 1{
// 왼쪽으로 1회전.
if i != 0 {
let temp = innerS.first!
innerS.removeFirst()
innerS.append(temp)
}
var stack = [Character]()
for (index, j) in innerS.enumerated() {
if stack.count >= 1 && leftBracket.contains(stack.last!) && rightBracket.contains(j) {
if leftBracket.firstIndex(of: stack.last!) == rightBracket.firstIndex(of: j) {
stack.removeLast()
} else {
stack.append(j)
}
} else {
stack.append(j)
}
if index == innerS.count - 1 && stack.count == 0 {
answer += 1
}
}
}
return answer
}
728x90
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 위장(lv. 2) (0) | 2023.03.22 |
---|---|
[Swift] 프로그래머스 행렬의 곱셈(lv. 2) (0) | 2023.03.21 |
[Swift] 프로그래머스 [1차] 캐시(lv. 2) (0) | 2023.03.17 |
[Swift] 프로그래머스 H-Index(lv. 2) (0) | 2023.03.16 |
[Swift] 프로그래머스 멀리 뛰기(lv. 2) (1) | 2023.03.15 |
댓글