알고리즘/codewars

codewars: Consecutive strings

꾸준함. 2018. 1. 29. 11:00

문제 링크입니다:http://www.codewars.com/kata/56a5d994ac971f1ac500003e/train/cpp


/*

string 배열과 int형 변수 k가 주어졌다.

배열의 요소(문자열) k번 연속으로 이어붙였을 때 제일 긴 문자열을 반환하시오

*/

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

//using namespace std를 작성했지만 codewars 컴파일러에서는 std::를 붙이게끔 했기 때문에 std::를 붙였다

class LongestConsec

{

public:

        static std::string longestConsec(std::vector<std::string> &strarr, int k);

};

 

std::string LongestConsec::longestConsec(std::vector<std::string> &strarr, int k)

{

        if (strarr.size() == 0 || strarr.size() < k || k <= 0)

               return "";

        int max = 0, start;

        std::string result = ""; //결과 문자열은 일단 NULL

        //문자열을 하나하나 붙여가면서 길이를 계산하기 보다는

        //k 길이만큼씩 문자열의 길이 합의 최대치를 구하고

        //해당 구간의 제일 첫번째를 start에 저장했다

        for (int i = 0; i < strarr.size()-k+1; i++)

        {

               int sum = 0;

               for (int j = i; j < k+i; j++)

                       sum += strarr[j].length();

               if (max < sum)

               {

                       start = i;

                       max = sum;

               }

        }

        //start부터 start+k까지 문자열을 합한 뒤 반환

        for (int i = 0; i < k; i++)

               result.append(strarr[start + i]);

        return result;

}

 

int main(void)

{

        vector<string> arr = { "zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail" };

        cout << LongestConsec::longestConsec(arr, 2) << endl;

        arr = { "ejjjjmmtthh", "zxxuueeg", "aanlljrrrxx", "dqqqaaabbb", "oocccffuucccjjjkkkjyyyeehh" };

        cout << LongestConsec::longestConsec(arr, 1) << endl;

        return 0;

}



개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형