codewar: Scalling Squared Strings.
문제
- https://www.codewars.com/kata/56ed20a2c4e5d69155000301
Codewars: Train your coding skills
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.
www.codewars.com
문제풀이
- 문자열 strng는 "\n" 로 구분이 됩니다.
- 한 단어를 반복해야하는 k와, \n 단위로 반복해야하는 v가 입력됩니다.
-> strng : "abc\nbcd", k: 2, v: 2
-> abc 와 bcd 로 분리
-> k에 따라, aabbcc (각 문자를 k번 반복합니다.)
-> v에 따라, aabbcc\naabbcc (\n 단위로 반복합니다.)
- 위의 알고리즘에 따라, strng 을 \n 단위로 일단 분리를 합니다. ( strng.split("\n")
- 그리고, 새로운 단어들을 위한 Array를 선언합니다. ( 하나의 결과가 끝날때마다, \n로 붙혀줘야하는데 편리하게 하기 위함 )
- 그 이후, 단어를 하나씩 돌아가면서 k번만큼 반복하여 새로운 단어를 생성합니다. ( for(int j=0 ~~ )
- 생성된 새로운 단어를 v번만큼 생성하여 결과에 저장합니다.
- 모든 loop이 끝이 났다면, "\n"을 덧붙혀서 원하는 하나의 String 으로 만들어 return 시킵니다.
- "" 가 입력되었을 시에는, 결과가 무조건 "" 이므로, 처음에 처리를 해줍니다.
public class Scale {
public static String scale(String strng, int k, int v) {
if( "" == strng )
return "";
String[] split_words = strng.split("\n");
int result_word_size = split_words.length * v;
String[] result_word_list = new String[result_word_size];
int array_idx = 0;
for(String word : split_words)
{
String change_word = "";
for(int i=0; i<word.length(); ++i)
{
for(int j=0; j<k; ++j)
{
change_word += word.charAt(i);
}
}
for(int i=0; i<v; ++i)
{
result_word_list[array_idx++] = change_word;
}
}
String result = String.join("\n", result_word_list);
return result;
}
}