본문 바로가기
Study with me/프로그래머스 L0 마스터하기

프로그래머스 - L0 문자열잘라서정렬하기 // sort() & split()

by 외계나무 2024. 1. 10.

프로그래머스 - level 0 문자열 잘라서 정렬하기

import java.util.Arrays;

class Solution {
    public String[] solution(String myString) {
        String[] answer = myString.trim().split("x");
        for(int i=0; i<answer.length; i++) {
            answer[i] = answer[i].replaceAll(" ", "").trim();
        }
        answer = Arrays.stream(answer).filter(str -> str.length()>=1).toArray(String[]::new);
        Arrays.sort(answer);
        return answer;
    }
}

 

자, 그럼 여기 오기까지 있었던 고난들을 소개한다...

첫번째 고난 : Arrays.sort()의 결과물이 배열이 아니라 void라는 사실을 잊어버림.

` /Solution.java:7: error: incompatible types: void cannot be converted to String[] `를 마주하고 으잉..? 함.

import java.util.Arrays;

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

→ return 전에 sort 하고 answer을 반환하는 것으로 해결.

import java.util.Arrays;

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

 

두번째 고난 : 테스트 케이스 예시는 통과했는데 실제 실행에서 테스트 케이스 11개 모두 에러.

공백인가 싶어 공백제거를 다 했는데도 똑같은 결과에 OTL...

import java.util.Arrays;

class Solution {
    public String[] solution(String myString) {
        String[] answer = myString.trim().split("x");
        for(int i=0; i<answer.length; i++) {
            answer[i] = answer[i].trim();
        }
        Arrays.sort(answer);
        return answer;
    }
}

split의 특성상 구분자 사이에 아무것도 없으면 공백 배열을 만들기 때문에 생긴 문제였다. ""가 배열 요소로 들어가서...ㅎ

split의 구분자를 정규식으로 넣어 x가 여러개 연속으로 있어도 하나의 구분자로 인식하도록 해서 해결.

import java.util.Arrays;

class Solution {
    public String[] solution(String myString) {
        String[] answer = myString.trim().split("[x]+");
        for(int i=0; i<answer.length; i++) {
            answer[i] = answer[i].replaceAll(" ", "").trim();
        }
        Arrays.sort(answer);
        return answer;
    }
}

 

세번째 고난 : 근데 여전히 테스트 2번, 10번에서 에러가 뜸... 왜..?

몰라 나도... 그래서 그냥 다른 방식을 써보기로 함.

→ 배열 요소중 길이가 1 이상이 아닌 건 걸러내는 filter 통해 해결

import java.util.Arrays;

class Solution {
    public String[] solution(String myString) {
        String[] answer = myString.trim().split("x");
        for(int i=0; i<answer.length; i++) {
            answer[i] = answer[i].replaceAll(" ", "").trim();
        }
        answer = Arrays.stream(answer).filter(str -> str.length()>=1).toArray(String[]::new);
        Arrays.sort(answer);
        return answer;
    }
}