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

윤준혁·2024년 2월 24일

문제 설명

제한 조건

입출력 예

나의 풀이

import java.util.*;

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

과정

  1. 문자열을 담을 list를 지정해준다
  2. list에 strings[i]에 n번 째 문자를 앞에 추가해서 list에 넣는다
  3. Collections.sort(arraylist) : ArrayList 오름차순 정렬
  4. answer에 2번 과정에서 해줬던 문자를 뺀 원래 문자열을 넣는다

다른 사람 풀이

import java.util.*;

class Solution {
  public String[] solution(String[] strings, int n) {
      Arrays.sort(strings);
      Arrays.sort(strings, new Comparator<String>(){
          @Override
          public int compare(String s1, String s2){
              if(s1.charAt(n) > s2.charAt(n)) return 1; //
              else if(s1.charAt(n) < s2.charAt(n)) return -1;
              else return 0;
          }
      });
      return strings;
  }
}
  • Comparable과 Comparator는 모두 인터페이스(interface)
  • Comparable 인터페이스를 쓰려면 compareTo 메소드를 구현해야하고, Comparator 인터페이스를 쓰려면 comapre 메소드를 구현해야 한다
  • Comparable은 "자기 자신과 매개변수 객체를 비교"하는 것이고, Comparator는 "두 매개변수 객체를 비교"(본질적으로 비교한다는 것 자체는 같지만, 비교 대상이 다르다는 것)

0개의 댓글