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

chaemin·2024년 4월 23일
0

프로그래머스

목록 보기
26/64

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12915

2. 풀이

문제를 잘 이해해야 하는데 각 단어의 n번째 인덱스의 문자로 정렬 이다. 즉 "u", "e", "a"이렇게 뽑힌다면 뽑힌 문자열을 오름차순 정렬하여
a -> e -> u 순으로 car, bed, sun으로 나오게 하는 것이 문제의 핵심이다.

언제나 문제를 이해하는 것이 핵심이다. 문제를 제대로 이해하면 바로 정답에 도출하기 가까워진다.

하지만 이에 추가 조건이 또 있다.

인덱스가 같은 문자가 여러개일경우, 사전 순으로 앞선 문자열이 앞쪽에 위치한다는 것이다.
  1. 람다식으로 펼치기
Arrays.sort(strings, (s1, s2) -> {
    if(s1.charAt(n) == s2.charAt(n)){
        return s1.compareTo(s2);
    }
    return s1.charAt(n) - s2.charAt(n);
});
  1. new Comparator 사용하기
Arrays.sort(strings, new Comparator<String>(){
    @Override 
    public int compare(String s1, String s2){
        if(s1.charAt(n) == s2.charAt(n)){
            return s1.compareTo(s2);
        }
        return s1.charAt(n) - s2.charAt(n);
    }
});

사용하기에는 람다식으로 전개가 이해하고 구현하기 좀 더 쉬워보인다.
하지만 Comparator 의 방식도 반드시 익히고 있어야 한다!

3. 전체 코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        
        Arrays.sort(strings, (s1, s2) -> {
            if(s1.charAt(n) == s2.charAt(n)){
                return s1.compareTo(s2);
            }
            return s1.charAt(n) - s2.charAt(n);
        });
        
        // 같은 내용이다.
        // Arrays.sort(strings, new Comparator<String>(){
        //     @Override 
        //     public int compare(String s1, String s2){
        //         if(s1.charAt(n) == s2.charAt(n)){
        //             return s1.compareTo(s2);
        //         }
        //         return s1.charAt(n) - s2.charAt(n);
        //     }
        // });
        
        return strings;
    }
}

0개의 댓글

관련 채용 정보