문제 설명
문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 빈 문자열은 반환할 배열에 넣지 않습니다.
제한사항
1 ≤ myString ≤ 100,000 myString은 알파벳 소문자로 이루어진 문자열입니다.
나의 코드
import java.util.Arrays;
class Solution {
public String[] solution(String myString) {
String[] answer = myString.split("x");
Arrays.sort(answer);
return answer;
}
}
코드 실행
시 모든 테스트를 통과했지만, 제출 후 채점하기
에서 테스트 다 실패... 뭐 때문일까 🤔 라고 생각하면서 문제를 다시 읽어보니 단, 빈 문자열은 반환할 배열에 넣지 않습니다.
라고 되어있다. x
를 기준으로 split
을 하면 연속된 x
가 있으면 빈 문자열이 생성된다. 이것을 제거하는 코드를 추가해야 했다.
import java.util.Arrays;
import java.util.ArrayList;
class Solution {
public String[] solution(String myString) {
String[] answer = myString.split("x");
ArrayList<String> list = new ArrayList<>();
for(int i=0; i<answer.length; i++) {
if(!answer[i].isEmpty()) {
list.add(answer[i]);
}
}
answer = new String[list.size()];
for(int j=0; j<list.size(); j++) {
answer[j] = list.get(j);
}
Arrays.sort(answer);
return answer;
}
}
다른 사람 코드
import java.util.*;
class Solution {
public String[] solution(String myString) {
return Arrays.stream(myString.split("x")).filter(s -> !s.isEmpty()).sorted().toArray(String[]::new);
}
}
stream
사용
import java.util.*;
class Solution {
public String[] solution(String myString) {
StringTokenizer st = new StringTokenizer(myString, "x");
int idx = 0, N = st.countTokens();
String[] result = new String[N];
for (int n = 0;n < N;n++)
result[idx++] = st.nextToken();
Arrays.sort(result);
return result;
}
}
StringTokenizer
사용
import java.util.*;
class Solution {
public String[] solution(String myString) {
String[] splitStrings = myString.split("x");
List<String> resultList = new ArrayList<>();
for (String s : splitStrings) {
if (!s.equals("")) {
resultList.add(s);
}
}
String[] resultArray = new String[resultList.size()];
resultList.toArray(resultArray);
Arrays.sort(resultArray);
return resultArray;
}
}
향상된 for문
사용
느낀 점
우선, 좀 더 문제를 꼼꼼히 읽어야겠다고 생각이 들었다 😭 다른 사람 코드에서 stream
과 StringTokenizer
는 아직 익숙한 방식이 아니라 사용하기 부담스럽지만 계속 눈으로 익히면서 익숙해지도록 할 예정! 또한, 향상된 for문
도 아직 익숙하지 않은데 가독성좋고 인덱스문제를 해결할 수 있다는 장점이 존재하기 때문에 필요할 때 사용할 수 있도록 노력해봐야겠다.