[Codewars #51] Consecutive strings (6kyu)

[Codewars #51] Consecutive strings (6kyu) 문제 풀이

Posted by karais89 on January 25, 2019

Instructions

링크

You are given an array strarr of strings and an integer k. Your task is to return the first longest string consisting of k consecutive strings taken in the array.

Example: longest_consec([“zone”, “abigail”, “theta”, “form”, “libe”, “zas”, “theta”, “abigail”], 2) –> “abigailtheta”

n being the length of the string array, if n = 0 or k > n or k <= 0 return “”.

Note consecutive strings : follow one after another without an interruption

My Solution

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
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;

public class LongestConsecutives
{
    public static String LongestConsec(string[] strarr, int k)
    {
        // your code
        if (strarr == null || strarr.Length == 0 ||
            strarr.Length < k || k <= 0)
        {
          return string.Empty;
        }

        int maxLength = 0;
        int longestIndex = 0;
        for (int i = 0; i < strarr.Length; i++)
        {
          int length = 0;
          for (int j = i; j < strarr.Length && j < i + k; j++)
          {
            length += strarr[j].Length;
          }

          if (length > maxLength)
          {
            maxLength = length;
            longestIndex = i;
          }

        }
        string str = "";
        for (int i = longestIndex; i < longestIndex + k; i++)
        {
          str += strarr[i];
        }
        return str;
    }
}
  • 영어 해석이 안되서 무슨 조건인지 정확히 모르겠다.
  • k개의 연속된 문자열 길이의 합이 가장 긴 문자열을 구하면 된다.
  • stringBuilder를 사용하는 부분은 일단 생략.

Best Practices 1

1
2
3
4
5
6
7
8
9
10
11
using System;
using System.Linq;
public class LongestConsecutives {
    public static string LongestConsec(string[] s, int k){
        return s.Length==0||s.Length<k||k<=0 ? ""
             : Enumerable.Range(0,s.Length-k+1)
                         .Select(x=>string.Join("",s.Skip(x).Take(k)))
                         .OrderByDescending(x=>x.Length)
                         .First();
    }
}
  • linq 사용

Best Practices 2

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
 public class LongestConsecutives
        {
            public static string LongestConsec(string[] strarr, int k)
            {
                if (k > strarr.Length || strarr.Length == 0 || k <= 0)
                {
                    return string.Empty;
                }

                var currentStr = string.Empty;
                for (var i = 0; i < strarr.Length; i++)
                {
                    var str = string.Empty;
                    for (var j = i; j < k + i && j < strarr.Length; j++)
                    {
                        str += strarr[j];
                    }

                    if (currentStr.Length < str.Length)
                    {
                        currentStr = str;
                    }
                }

                return currentStr;
            }
        }
  • 논리는 거의 비슷한듯.