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

Bluewave·2024년 8월 7일

코테공부_java

목록 보기
45/99
post-thumbnail

문제

✨ 문제 바로가기

문제레벨정답률
문자열 내 마음대로 정렬하기Lv.171%

My Code

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        for(int i = 0; i<strings.length-1; i++){
            for(int j = i+1; j<strings.length; j++){
                char a = strings[i].charAt(n);
                char b = strings[j].charAt(n);
                if(a>b){ 
                    String str = "";
                    str = strings[j];
                    strings[j] = strings[i];
                    strings[i] = str;
                } else if(a == b){
                    //문자열 전체 사전적 비교
                    if(strings[i].compareTo(strings[j]) > 0){
                        String str = "";
                        str = strings[j];
                        strings[j] = strings[i];
                        strings[i] = str;
                    }
                }
            }
            
        }
        
        return strings;
    }
}
  1. 이중 for 문을 사용해서 전체 문자열 돌면서 각각 하나씩 문자열을 뽑음

  2. a,b 문자에 각 문자열의 n 번째 문자를 저장

  3. a가 b보다 알파벳 순서가 뒤라면, 두 문자열 자리 바꾸기

  4. a와 b가 같은 알파벳이라면, 문자열 전체를 사전적 비교하기


문자열 사전적 비교하기

a.compareTo(b)
** char에는 적용되지 않음!!

return 값에 따른 의미

  • 양수 : a가 b보다 뒷순서
  • 음수 : a가 b보다 앞순서
  • 0 : 동일한 문자열

알파벳 순서 비교하기

a>b
char 문자의 경우 compareTo가 적용되지 않고, 부등호를 이용해서 간단하게 비교하면 된다.


최적화 코드

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번째 문자를 기준으로 비교
                int charCompare = Character.compare(s1.charAt(n), s2.charAt(n));
                if (charCompare != 0) {
                    return charCompare;
                }
                // n번째 문자가 같은 경우, 전체 문자열을 사전 순으로 비교
                return s1.compareTo(s2);
            }
        });
        
        return strings;
    }
}
  1. Arrays.sort 메서드에서 Comparator를 통해 정렬 방법 재정의

  2. compare 메소드 안에서 n 번째 문자열을 기준으로 비교하고, 그 문자가 다르면 그 결과를 토대로 정렬

  3. 문자가 같다면 전체 문자열을 기준으로 정렬


Arrays.sort() 메서드는 알고 있었지만, 이를 활용하여 정렬 방법을 재정의할 생각은 못했던 것 같다.
다음에 배열을 정렬할 일이 있으면 sort 메서드를 적극 활용해야겠다.

profile
Developer's Logbook

0개의 댓글