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

최지나·2023년 10월 15일
1

코딩테스트

목록 보기
36/154

문제

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

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

입출력 예

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

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/12915

생각

  • 인덱스 n번째를 추출해서 비교하더라도, 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 해당 조건 때문에 다른 인덱스의 문자열도 비교해야 한다
  • 차라리 n 번째 index를 각 문자열의 0 번째 위치로 가져온 뒤 정렬하고, 이를 원래 위치로 옮기자

코드

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {
        
        String[] converted = new String[strings.length];
    
        int idx = 0;
        for (String s: strings){
            converted[idx] = s.charAt(n) + s.substring(0,n) + s.substring(n+1, s.length());
            idx++;
        }
        
        Arrays.sort(converted);
                
        String[] answer = new String[strings.length];
        
        int num = 0;
         for (String c: converted){
            answer[num] = c.substring(1, n+1) + c.substring(0,1) + c.substring(n+1, c.length());
            num++;
        }
    
        return answer;
    } 
}

다른 사람의 풀이

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings);
        Arrays.sort(strings, Comparator.comparing((s) -> s.substring(n, n + 1)));
        return strings;
    }
}
  • 먼저 문자열들을 사전 순으로 정렬 해 둔 뒤, n번째 index를 기준으로 정렬하는 풀이를 기록한다.
  • Arrays.sort()를 사용하여 배열을 정렬할 때 Comparator 객체와 람다 표현식을 사용하면 첫 번째 문자가 아닌 n 번째 문자 또는 이를 넘어서서 새로운 정렬 기준으로 정렬할 수 있다는 것을 기억해야겠다🙃🙃
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글