문제 설명

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

제한 조건

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

입출력 예

abreturn
["sun", "bed", "car"]1["car", "bed", "sun"]
["abce", "abcd", "cdx"]2["abcd", "abce", "cdx"]

💡문제 해결💡

n번째의 값을 비교해서 swap, 값이 같으면 sorted를 사용해서 사전순으로 정렬될 수 있게 함
한번도 swap이 일어나지 않으면 break;

작성 코드

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
            String[] answer = {};

            while (true){
                boolean swaped = false;
                for (int i = 0; i < strings.length - 1; i++){
                    if (strings[i].toCharArray()[n] > strings[i + 1].toCharArray()[n]) {
                        String temp = strings[i];
                        strings[i] = strings[i+1];
                        strings[i+1] = temp;
                        swaped = true;
                    } else if (strings[i].toCharArray()[n] == strings[i + 1].toCharArray()[n]) {
                        String[] temp = {strings[i], strings[i+1]};
                        strings[i] = (String) Arrays.stream(temp).sorted().toArray()[0];
                        strings[i+1] = (String) Arrays.stream(temp).sorted().toArray()[1];
                    }
                }
                if (swaped == false) break;
            }
            answer = strings;
            return answer;
        }
}

너무너무 비효율적이다 정렬 기준을 정의해서 풀도록하자

그 외 풀이

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
            String[] answer = {};
            Arrays.sort(strings);
            Arrays.sort(strings, (a,b) -> a.toCharArray()[n] - b.toCharArray()[n]);
            answer = strings;
            return answer;
        }
}

람다식으로 하니 너무 간단!

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글