CodeWars 서른 다섯 번째 문제
Updated:
Your order, please
public static String order(String words) {
String[] splitWords = words.split(" ");
String[] sortWords = new String[splitWords.length];
for (int i = 0; i < splitWords.length; i++) {
sortWords[i] = findWord(i + 1, splitWords);
}
return String.join(" ", sortWords);
}
private static String findWord(int i, String[] splitWords) {
for (int j = 0; j < splitWords.length; j++) {
if (splitWords[j].contains(String.valueOf(i))) {
return splitWords[j];
}
}
return "";
}
-
나의 머리로는 이중 반복문을 아니면 풀 수 없다고 생각했다.
-
숫자 1,2,3,4 순으로 split한 Stirng 배열을 순환하면서 해당하는 단어를 새로 만든 String 배열에 넣는 방식으로 생각했다.
-
하지만 역시… 하나의 반복문으로 해결 가능했다. 그것이 바로 아래 Best 코드이다.
public static String order(String words) { if (words == "") return words; String newWords[] = new String[words.split(" ").length]; for (String word : words.split(" ")) { int index = Integer.valueOf(word.replaceAll("[^0-9]", "")) - 1; newWords[index] = word; } return String.join(" ", newWords); }
-
split한 String 배열을 딱 한 번 순환한다. 이때 단어에 포함된 숫자가 바로 index 값이다.(정확히는 -1)
- [^0-9] 정규식을 통해서 숫자를 제외한 나머지는 ““처리하고 word에서 나오는 숫자에 -1을 하면 newWords에 들어가는 index 값인데 거기에 word를 넣는다.
- 캬… 기가막힌 코드였다.. 나도 생각 조금 더했음 이렇게 풀었을것이다… 풀었을까?