프로그래머스 문자열 내 마음대로 정렬하기 java

최준호·2021년 7월 21일
0

algorithm

목록 보기
26/39

문제

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한사항

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력 예

풀이

public class StringSort {
    public static void main(String[] args) {
        StringSort ss = new StringSort();
        String[] strings = {"sun", "bed", "car"};
        int n = 1;
        String[] solution = ss.solution(strings, n);
        for (String s : solution) {
            System.out.println("s = " + s);
        }
    }
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, ((o1, o2) -> {
            String a = String.valueOf(o1);
            String b = String.valueOf(o2);
            char c1 = a.charAt(n);
            char c2 = b.charAt(n);

            if(c1==c2) return a.compareTo(b);
            return c1-c2;
        }));

        return strings;
    }
}

조금 복잡한? 지금까지 풀었던 문제와는 조금 다른 정렬 문제였다. 처음에는 sort를 사용하여 재귀로 풀 생각을 했는데. 그럼 또 sort를 어떤 정렬 알고리즘으로 풀어야할지 고민이 되었다. 그래서 못 풀고 있었고 결국 검색하여 찾아보니 compareTo()를 통해서 해결 했더라...ㅜㅜ 내가 원하는 방식은 아니였지만 요즘 코테에서 자체 제공하는 idea와 검색 또한 제한한다면 다음과 같은 방식 풀이가 도움이 될것이다. 코테에서 내가 정렬 알고리즘까지 구현한다면... 하는 분들도 분명 계시겠지만 ㅎㅎ...(내 친구) 나는 못할거 같다 아직은!

정렬은 sort로 풀어 내고 String끼리 비교는 compareTo()가 있다

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글