Codewars(알고리즘)/6Kyu

[Codewars] [6Kyu] Consecutive Strings

Dannian 2021. 3. 5. 19:33
반응형
 

Codewars: Achieve mastery through challenge

Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.

www.codewars.com

이번 문제는 String Array(strarr)와 k(Int, 조합할 갯수)값이 주어집니다.

그리고 strarr의 element들을 k만큼 각각 합쳤을 때 가장 긴 String을 반환하는 문제입니다.

이 문제의 하단에 제약조건이 모두 있는데, n=0, k > n, k <= 0이렇게 세 경우에는 return ""을 한다는 것입니다.

 

1.Swift

1-1. 본인의 풀이

func longestConsec(_ strarr: [String], _ k: Int) -> String {
    guard strarr.count != 0 else { return "" }
    guard k != 0 && k <= strarr.count else {
        return ""
    }
    var longStr : String = ""
    var newStr : ArraySlice<String>
    for index in 0 ..< strarr.count{
        if index + k >= strarr.count {
            newStr = strarr[index..<strarr.endIndex]
        }else{
            newStr = strarr[index..<index+k]
        }
        if newStr.joined().count > longStr.count {
            longStr = newStr.joined()
        }
    }
    return longStr
}

먼저 저는 제약조건에 따라서 return ""을 하는 경우를 먼저 선언해줬습니다. strarr.count가 0인 경우, k = 0이거나, strarr.count값이 k보다 작은 경우를 guard를 통해서 먼저 걸렀습니다.

그 후 각각 longStr, newStr이라는 변수를 만들고, strarr.count 만큼 for문을 돌립니다.

for문 안에서는 index + k값이 strarr.count보다 작은지 확인하고, 그것이 true인 경우 newStr에 합칠 수 있도록 구현했습니다.

이 때 strarr.count 값 보다 index + k값이 크거나 같은 경우에는 index부터 strarr.endIndex까지 newStr에 넣어주도록 합니다.

이렇게 구해진 newStr값이 longStr보다 크면 longStr을 교체, 아닌 경우 다음으로 넘어갑니다.

여기서 for문의 조건에 strarr.count - k + 1만큼 해도 무방할 것 같습니다.

 

1-2. Best Solution

func longestConsec(_ strarr: [String], _ k: Int) -> String {
    var longest: String = ""
    let n = strarr.count
    if n == 0 || k > n || k <= 0 {return longest}
    for i in 0..<(n - k + 1) {
        let str: String = strarr[i..<i + k].joined(separator: "")
        if str.characters.count > longest.characters.count {longest = str}
    }
    return longest
}

이 풀이도 마찬가지로 처음에 제약조건에 대해서 return을 해주고, 그 외엔 string의 count를 확인해서 가장 긴 String을 return해 주는 것인데, 일단 n - k + 1까지만 돌기 때문에 제 코드보다 for문을 k만큼 덜 돌게 됩니다.

 

이번 문제는 사실 어려운 것 보다는 String, Character의 이용에 대한 문제였습니다.(6Kyu인 이유는 모르겠어요...)

반응형

'Codewars(알고리즘) > 6Kyu' 카테고리의 다른 글

[Codewars] [6Kyu] Give me a Diamond  (0) 2022.01.26
[Codewars] [6Kyu] Moduli number system  (0) 2022.01.26
[Codewars] [6Kyu] How Much?  (0) 2021.03.05
[Codewars] [6Kyu] Counting Duplicates  (0) 2021.03.04
[Codewars] [6kyu] Braking well  (0) 2021.03.03