아직 더 구현해야 하는 부분
u의 첫번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙인다
import Foundation
//균형잡힌 괄호 문자열 구하기
func getBalancedIndex(_ w: String) -> Int{
var count = 0 //왼쪽 괄호의 개수
var index = 0
for i in 0..<w.count {
let startIndex = w.index(w.startIndex, offsetBy: i) //시작부터 i까지의 인덱스
let endIndex = w.index(after: startIndex) //startIndex의 바로 다음 인덱스
if String(w[startIndex..<endIndex]) == "(" {
count += 1
} else {
count -= 1
}
if count == 0 {
index = i
return index
}
}
return index
}
func checkProper(_ u: String) -> Bool {
var count = 0 //왼쪽 괄호의 개수
var proper = true
var index = 0
for i in 0..<u.count {
let startIndex = u.index(u.startIndex, offsetBy: i) //시작부터 i까지의 인덱스
let endIndex = u.index(after: startIndex) //startIndex의 바로 다음 인덱스
if String(u[startIndex..<endIndex]) == "(" {
count += 1
} else {
if count == 0 { //올바르지 않은 경우
proper = false
}
count -= 1
}
}
return proper
}
func solution(_ p: String) -> String {
var answer = ""
let w = p
if w == "" {
return answer
}
//균형잡힌 괄호 문자열의 index 구하기 -> Int값을 가져옴
let bIndex = getBalancedIndex(w)
let balancedIndex = w.index(w.startIndex, offsetBy: bIndex)
let u = String(w[...balancedIndex]) //균형잡힌 괄호 문자열
let v = String(w[w.index(after: balancedIndex)...])
//u가 올바른 괄호 문자열인 경우
if checkProper(u) {
answer = u + solution(v)
} else { //u가 올바른 괄호 문자열이 아닌 경우
answer += "("
answer += solution(v)
answer += ")"
//u의 첫번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙인다
//print(String(u[u.index(u.startIndex)...u.index(u.endIndex)]))
}
return answer
}
다른 사람들의 풀이를 보니
prefix와 suffix를 사용했다
let str = "1.asd"
let findIdx:String.Index = str.firstIndex(of: ".")! //원하는 지점을 정해서
print("\(str[findIdx...])") // 원하는 지점부터 끝까지 .asd를 출력
print("\(str.prefix(3))")//앞에서 3개만 보여줘 1.a출력
print("\(str.suffix(3))")//뒤에서 3개만 보여줘 asd 출력
let array = [1, 5, 2, 6, 3, 7, 4]
print(array.suffix(2)) //뒤에서 2개 [7, 4]
print(array.suffix(from: 1)) //1번째자리부터 [5, 2, 6, 3, 7, 4]
print(array.prefix(4)) //앞에서 4개 [1, 5, 2, 6]
suffix 접미사
prefix 접두사
let numbers = [10, 20, 30, 40, 50, 60]
if let i = numbers.firstIndex(of: 40) {
print(numbers.suffix(from: i))
print(numbers[i...])
}
// [40, 50, 60]
// [40, 50, 60]
let numbers = [10, 20, 30, 40, 50, 60]
if let i = numbers.firstIndex(of: 40) {
print(numbers.prefix(upTo: i))
print(numbers[...i])
}
// [10, 20, 30]