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

알파로그·2023년 3월 12일
0

✏️문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때,

각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.

예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

✏️제한 조건

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

✏️ 문제 풀이

📍 1차 시도 - 성공

strings 의 인덱스 값의 맨 앞에 정렬해야 하는 알파뱃을 더해준 뒤,

정렬하고 더해줬던 값을 빼줬다.


솔직히 머리 쓰시 귀찮으면 컴파일러에게 노가다를 시켜 풀 수도 있지만 최대한 효율을 추구하기 위해 고민을 많이 하면서 만들어낸 코드고,

개인적으로 결과물도 마음에 든다.


다른 사람의 풀이를 봐도 개인적으로 내 코드가 더 효율적이고 가독성도 좋은 것 같다.

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        
        for (int i = 0; i < strings.length; i++)
            strings[i] = strings[i].charAt(n) + strings[i];

        Arrays.sort(strings);

        for (int i = 0; i < strings.length; i++)
            strings[i] = strings[i].substring(1);
        
        return strings;
    } 
}

📍 다른사람의 풀이

좋아요를 가장 많이 받은 코드이다.

내가 푼 방식과 맥락은 비슷하지만 불필요한 라이브러리와 수식이 더해저 가독성이 떨어진다고 생각했는데

테스트를 해보니 속도면에서는 내 코드보다 빨랐다.
Arrays 보다 Collection 으로 정렬하는 속도가 더 빠른 듯 하다.

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        ArrayList<String> arr = new ArrayList<>();
        for (int i = 0; i < strings.length; i++) {
            arr.add("" + strings[i].charAt(n) + strings[i]);
        }
        Collections.sort(arr);
        answer = new String[arr.size()];
        for (int i = 0; i < arr.size(); i++) {
            answer[i] = arr.get(i).substring(1, arr.get(i).length());
        }
        return answer;
    }
}
profile
잘못된 내용 PR 환영

0개의 댓글