Skip to main content

[Java] 12915 문자열 내 마음대로 정렬하기


1. 문제

문자열 내 마음대로 정렬하기


2. 접근방법

  1. ​Comparator 사용해서 커스텀 정렬하면 됨

3. 오답코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return Character.compare(s1.charAt(n), s2.charAt(n));
            }
        });
        
        return strings;
    }
}

image.png

  • new Comparator<String>()
    • → 꺽쇠 옆 중괄호 쓰기
  • Comparator 쓸 때 괄호 위치 주의
    • Arrays.sort(){@Override}가 아니라 Arrays.sort({ @Override })
    • 자바스크립트 함수랑 비슷하다고 생각하면 됨
  • n번째 문자가 같으면 사전순으로 비교하는 분기점 처리안함
    • strings = ["abce", "abcd"], n = 2라면
    • "abce".charAt(2) = 'c' / "abcd".charAt(2) = 'c'
    • 두 문자열의 n번째 문자는 같다.
    • 그런데 전체 문자열은 "abce"와 "abcd"로 서로 다르다.
    • 만약 우리가 n번째 문자만 비교한다면 둘은 동등한 문자열로 취급되서 정렬 순서가 어떻게 나올지 예측할 수 없다
    • 그래서 문제에 n번째 문자가 같으면 문자열 자체를 사전순으로 비교한다는 조건이 있다.

4. 정답코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                // n번째 문자가 같으면 사 전순 비교
                if (s1.charAt(n) == s2.charAt(n)) {
                    return s1.compareTo(s2);
                } else {
                // 아니면 n번째 문자 비교
                    return Character.compare(s1.charAt(n), s2.charAt(n));
                }
            }
        });
        
        return strings;
    }
}