7-2 문자열 내 마음대로 정렬하기

유태형·2022년 10월 23일
0

알고리즘 - Java

목록 보기
21/32

출처

해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다




문제



문제 분석

n번째 문자를 기준으로 정렬하고, 만약 n번째 문자가 같은 문자열 끼리는 사전순으로 정렬하는 커스텀 정렬 문제입니다.




풀이

나만의 풀이

스트림을 이용하여 풀었었습니다.

  1. 사전순으로 정렬합니다
  2. n번째 문자를 기준으로 정렬합니다.

사전순으로 먼저 정렬하여 n번째 문자를 기준으로 정렬할때 반영되는 것을 활용하여 문제를 풀었었습니다.

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = Arrays.stream(strings)
            .sorted() //사전순
            .sorted(new Comparator<String>(){
                public int compare(String o1, String o2){
                    return o1.charAt(n) - o2.charAt(n); //n번째 문자
                }
            }).toArray(String[]::new);
        
        return answer;
    }
}
  • sorted(new Comparator<String>(){}) : 스트림을 Comparator 객체를 이용하여 커스텀 정렬합니다.
  • public int compare(String o1, String o2){...} : 오버라이딩하여 두 객체간 차이를 정수로 써 반환합니다. 이 정수값으로 객체들을 정렬합니다.
  • toArray(String[]::new) : 스트림을 String배열로 변환합니다.


강의의 풀이

람다식이 아닌 Arrays.sort()메서드를 활용하여 정렬하셨습니다.

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, (s1, s2) -> { //람다식 활용
            if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2); //사전 순
            return s1.charAt(n) - s2.charAt(n); //n번째 문자 순
        });
        return strings;
    }
}
  • Arrays.sort(배열, (s1, s2) -> {...}) : 람다식을 활용하여 정렬의 기준을 재정의 할 수 있습니다.



Github

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%5BJava%5D%20%EC%96%B4%EC%84%9C%EC%99%80%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%80%20%EC%B2%98%EC%9D%8C%EC%9D%B4%EC%A7%80/%ED%8C%8C%ED%8A%B87.Sort(%EC%A0%95%EB%A0%AC)/%EB%AC%B8%EC%9E%90%EC%97%B4_%EB%82%B4_%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C_%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0.java

profile
오늘도 내일도 화이팅!

0개의 댓글