문제 링크입니다: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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > codewars' 카테고리의 다른 글
codewars: Build a pile of Cubes (0) | 2018.01.29 |
---|---|
codewars: Fibonacci, Tribonacci and friends (0) | 2018.01.29 |
codewars: A Rule of Divisibility by 13 (0) | 2018.01.29 |
codewars: Equal Sides Of An Array (0) | 2018.01.28 |
codewars: Playing with digits (0) | 2018.01.28 |