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

2019. 3. 5. 23:53알고리즘문제/프로그래머스

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


1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12915?language=java


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




solution - 1) 나의 풀이 및 버블정렬 사용 (버블의 사용은 블로그 참조)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
  public String[] solution(String[] strings, int n) {
    for(int j = strings.length; j > 0; j--) {
        for(int i = 0; i < j-1; i++) {
            if(compareTo(strings[i], strings[i+1], n, n)) {
                swap(strings, i);
            }
        }
    }
    return strings;
  }
 
    public boolean compareTo(String a, String b, int n, int now) {
        if(a.charAt(now) > b.charAt(now)) return true;
        else if(a.charAt(now) == b.charAt(now)) {
            int next = n == now ? 0 : ++now;
            if(n == next) next++;
            return compareTo(a, b, n, next);
        }
        else return false;
    }
 
    public void swap(String[] strings, int i) {
        String temp = strings[i];
        strings[i] = strings[i+1];
        strings[i+1= temp;
    }
 
}
cs




solution - 2) collection sort 활용 및 발상의 전환 (사람들이 많이 사용)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
    }
}
cs






solution - 3) collection sort 활용 (내가 해보고 싶었던 방법)


public static <T> void sort (T[] a, Comparator<? super T> c)

: 인자값으로 객체를 받으며, 지정된 Comparator가 가리키는 순서에 따라 지정된 객체의 배열을 정렬한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;
 
class Solution {
  public String[] solution(String[] strings, int n) {
      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 s1.compareTo(s2);
              else if(s1.charAt(n) < s2.charAt(n)) return -1;
              else return 0;
          }
      });
      return strings;
  }
}
 
 
cs











참조

https://jamesdreaming.tistory.com/162

Comparable - 기본 정렬기준을 구현하는데 사용.

Comparator - 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용.