[프로그래머스/181866] 문자열 잘라서 정렬하기

☑️ 문제

프로그래머스 181866

☑️ 풀이

첫 번째 풀이

  • Arrays.sort 로 사전순으로 정렬을 한 뒤, 빈문자열을 제외한 모든 원소를 리턴한다.
//시간: 20.06ms
//메모리: 103MB

import java.util.*;

class Solution {
    public String[] solution(String myString) {
        String[] arr = myString.split("x");
        Arrays.sort(arr);

        List<String> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (!arr[i].equals("")) {
                list.add(arr[i]);
            }
        }

        String[] answer = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }

        return answer;
    }
}

두 번째 풀이

  • StringTokenizer 를 사용하면 이미 공백은 제외하고 생성되기 때문에 공백 처리를 따로 하지 않아도 된다.
//시간: 22.80ms
//메모리: 81.5MB

import java.util.*;

class Solution {
    public String[] solution(String myString) {
        StringTokenizer st = new StringTokenizer(myString, "x");
        String[] answer = new String[st.countTokens()];
        int idx = 0;
        while (st.hasMoreTokens()) {
            answer[idx++] = st.nextToken();
        }

        Arrays.sort(answer);
        return answer;
    }
}

세 번째 풀이

  • 다른 사람의 풀이를 보고 stream API 를 이용하여 풀어보았다.
  • stream API는 간편하지만 시간이 많이 소요되기 때문에 코테에서 잘 쓰지 않는다고 한다.
//시간: 43.09ms
//메모리: 85.6MB

import java.util.*;

class Solution {
    public String[] solution(String myString) {
        return Arrays.stream(myString.split("x")).filter(x -> !x.equals("")).sorted().toArray(String[]::new);
    }
}

© 2021. All rights reserved.

yaejinkong의 블로그