728x90
https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이런 괄호 문제는 stack으로 풀면 되는데,
이 문제는 문자열을 회전시키면서 각 문자 수식이 올바른 괄호인지를 체크해주는 추가적인 문제였다.
stack은 배열로 구현하고, 문자열의 회전은 앞 문자를 제거하고(removeFirst()) 뒤에 붙여줬다.(append())
checkParentheses 함수 부분이 올바른 괄호인지를 체크하는 기능을 한다. 조금 지저분하지만..
[내 코드]
import Foundation
func solution(_ s:String) -> Int {
var answer = 0
var tmp = s
for _ in 0..<s.count {
func checkParentheses(_ str: String) -> Bool {
var stack = [String]()
for char in str {
if stack.isEmpty { //스택이 빈 경우
if String(char) == "]" || String(char) == "}" || String(char) == ")" {
return false
}
stack.append(String(char))
continue
}
if String(char) == "(" || String(char) == "{" || String(char) == "[" {
stack.append(String(char))
} else {
if String(char) == ")", stack.last! == "(" {
stack.removeLast()
} else if String(char) == "]", stack.last! == "[" {
stack.removeLast()
} else if String(char) == "}", stack.last! == "{" {
stack.removeLast()
} else {
return false
}
}
}
return stack.isEmpty ? true : false
}
if checkParentheses(tmp) {
answer += 1
}
tmp.append(tmp.removeFirst())
}
return answer
}
print(solution("[](){}"))
print(solution("}]()[{"))
print(solution("[)(]"))
print(solution("}}}"))
checkParentheses 부분에서는 stack이 비었다면 "]", ")", "}"인 경우 올바른 괄호가 아니므로 return false.
"(", "{", "["는 모든 경우에서 push.
")", "}", "]"는 맨 뒤 원소와 짝이 맞다면 맨 뒤 원소 pop. 아니면 return false
다른 분의 코드를 보다가 checkParenthese 부분을 나와 다르게 하신 분을 찾았다.
while string.contains("{}") || string.contains("[]") || string.contains("()") {
string = string.replacingOccurrences(of: "{}", with: "")
string = string.replacingOccurrences(of: "()", with: "")
string = string.replacingOccurrences(of: "[]", with: "")
}
이렇게 하셨는데, 올바른 괄호들을 제거해 줬다(""로 바꿈)
replacingOccurences를 사용하는 것을 익혀야겠다!
(그런데 이 코드.. 시간이 너무 오래걸린다!ㅠ)
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Swift] n^2 배열 자르기 (0) | 2023.01.01 |
---|---|
[프로그래머스/Swift] 튜플 (0) | 2022.12.29 |
[프로그래머스/Swift] 예상 대진표 (0) | 2022.12.28 |
[프로그래머스/Swift] 영어 끝말잇기 (0) | 2022.12.28 |
[프로그래머스/Swift] 다음 큰 숫자 (0) | 2022.12.27 |