포스트

203. 크기가 작은 부분 문자열


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import Foundation

func solution(_ t:String, _ p:String) -> Int {
    
    var arr : [String] = []
    var answer : [String] = []
    var string : String = ""
    var intanswer : Int = 0
    
    arr = t.map{String($0)}
    
    if Int(p)! > 1 {
        for i in 0 ... arr.count-p.count {
            string = ""
                for j in i ..< i + (p.count) {
                    string += arr[j]
                }
                answer.append(string)
            }         
    } else {
        answer = arr
    }

    intanswer = answer.filter{Int(String($0))! <= Int(p)!}.count

    return intanswer
}

뭔가 Stylish하게 하고싶었는데 그러지 못했다.

일단 t에대해 각각의 원소를 담는 배열로 만들었다.

그리고나서 p가 1일때는 map그대로 쓰면 되기에 if조건을 달아서 1보다 클때를 기준으로 나눴다.

그리고서 반복문을 사용했는데 string은 계속 initializing해주었고, 그하위 반복문을 통해 t의 길이만큼 slicing하였다. 처음에는 생각없이 for i에서 in 0..<arr.count를 하는바람에 그다음 for문에서 i+p.count가 i를 벗어나서 out of range에러가 났다. 그래서 확인해보니, for 문에서 t.count만큼 빼주어야하는데 그러질 못했다.

그렇게 새로 만들어둔 배열 answer에 p의 갯수만큼 슬라이싱한 값을 넣었다.

그리고 filter를 통해 p의 값보다 같거나 작은 갯수를 리턴하였다.

문제는 풀었으나 썩 맘에 들진않는다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.