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

김재현·2024년 4월 24일
0

알고리즘 풀이

목록 보기
78/90
post-thumbnail

문제

오답

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        
        Arrays.sort(strings);
        
        for(int i=0;i<strings.length;i++) {
            for(int j=i+1;j<strings.length;j++) {
                getAns(strings, i, j, n);
            }
        }
        
        return strings;
    }
    
    public void getAns(String[] strings, int a, int b, int n) {
                 if(strings[a].charAt(n)>strings[b].charAt(n)) {
                    String tmp = strings[b];
                    strings[b] = strings[a];
                    strings[a] = tmp;
                }
    }
}

테스트케이스를 만들어서 실행 했을 때는 모두 성공했으나,
제출했을 때는 실패케이스가 있었다.

어디가 잘못 된 것이지 잘 모르겠다... 누군가 정답을 알려주셨으면좋겠다ㅜㅜ

정답

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = new String[strings.length];
        
        for(int i=0;i<strings.length;i++) {
            answer[i] = strings[i].charAt(n) + strings[i];
        }        
        
        Arrays.sort(answer);
        
        for(int i=0;i<answer.length;i++) {
            answer[i] = answer[i].substring(1);
        }
        
        return answer;
    }
}

결국 n번째 글자를 문자열 맨 앞에 추가하고,
Arrays.sort()를 활용하여 풀어냈다.

코드가 훨씬 간결해졌다.

다른 풀이

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        // Comparator를 사용하여 strings 배열을 커스텀 정렬
        Arrays.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                // 먼저 n번째 문자를 비교
                if (s1.charAt(n) > s2.charAt(n)) {
                    return 1;
                } else if (s1.charAt(n) < s2.charAt(n)) {
                    return -1;
                } else {
                    // n번째 문자가 같은 경우, 전체 문자열을 사전순으로 비교
                    return s1.compareTo(s2);
                }
            }
        });

        return strings;
    }
}

Comparator 인터페이스를 사용하여 커스텀 정렬 기준을 설정하였다.
먼저 n번째 문자를 기준으로 정렬하고,
n번째 문자가 동일한 경우에만 전체 문자열을 사전순으로 정렬한다.

이전에 Comparator 를 본 적이 있지만 너무나도 생소하다.
이것에 대한 공부의 필요성이 느껴진다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글