프로그래머스(Level1-30) 문자열 내 마음대로 정렬하기

LEE ·2022년 2월 21일

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

제한 조건
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
입출력 예
strings n return
["sun", "bed", "car"] 1 ["car", "bed", "sun"]["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]

구현코드:

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {
        ArrayList<String>list=new ArrayList<>();
        for(int i=0;i<strings.length;i++){
            list.add(strings[i].charAt(n)+strings[i]);
        }
        Collections.sort(list);
        String[] answer = new String[list.size()];
        for(int i=0;i<list.size();i++){
            answer[i]=list.get(i).substring(1,list.get(i).length());
        }
        return answer;
    }
}

코드해석:
이 문제를 풀기위해서 계속생각하던도중, 내가 생각하는 것으로는 답이없다는 것을 파악한 후 생각의 전환을 위해 이미 푸신분들 코드를 참고하였습니다. 정말 머리를 울리는 풀이였습니다. 이렇게 간단한걸 왜 생각을 못했을까... 더 열씸히 공부합시다.!!
풀이로 넘어가서 우선 문제는 n번째 인덱스로 오름차순을 한 후 만약 같은 값이 있다면 사전 순으로 오름차순 정리.
그러면 그냥 n번째 인덱스+원본 을 합쳐서 정렬 해버리면 끝.

추가로 내림차순 하는 방법을 가져왔습니다.

// ArrayList 준비
ArrayList<String> list = new ArrayList<>(Arrays.asList("C", "A", "B", "a"));
System.out.println("원본 : " + list); // [C, A, B, a]
// 오름차순으로 정렬
Collections.sort(list);
System.out.println("오름차순 : " + list); // [A, B, C, a]
// 내림차순으로 정렬
Collections.sort(list, Collections.reverseOrder());
System.out.println("내림차순 : " + list); // [a, C, B, A]
// 대소문자 구분없이 오름차순
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println("대소문자 구분없이 오름차순 : " + list); // [a, A, B, C]
// 대소문자 구분없이 내림차순
Collections.sort(list, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
System.out.println("대소문자 구분없이 내림차순 : " + list); // [C, B, a, A]

출처: https://hianna.tistory.com/569 [어제 오늘 내일]

0개의 댓글