프로그래머스 내마음대로 정렬하기

1. 문제 링크

프로그래머스 내마음대로 정렬하기

2. 문제 조건

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

제한 조건

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

3. 컴퓨팅 사고

  • 문자열의 사전순대로 정렬을 해야합니다.
    만약 배열을 사용할 경우 java.util.Arrays 유틸리티의 Arrays.sort()클래스를 사용하고 List와 같은 경우는 java.util.Collections클래스의 static 메소드인 sort()를 사용합니다.
    즉, List형식으로 만들어서 Collections.sort()를 사용하거나 Array인 경우 Arrays.sort()를 사용합니다.

Colletions.sort()를 사용하게 될 경우 n에 해당하는 값을 맨앞으로 추가시켜준다음에 그 값을 기준으로 오름 차순정렬을 시켜주게 됩니다. 그리고 나서 해당값을 다시 substring(1, arr.get(i).length())함수를 사용하여 값을 잘라주게 됩니다. 그러면 기존의 값으로 원상복귀 한다고 생각하시면 됩니다.

Arrays.sort()

1
2
3
4
5
6
7
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {

}
});

람다식으로 간단하게 변경도 가능합니다.

1
2
// 오름차순 Arrays.sort(strings,(s1,s2) -> s1.length() - s2.length());
// 내림차순 Arrays.sort(strings,(s1,s2) -> s2.length() - s1.length());

Colletions.sort()

1
Collections.sort(arr);

4. 소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class 문자열내마음대로정렬하기 {
public static void main(String[] args) {
String[] strings = {"sun", "bed", "car"};
int n = 1;
String[] answer;
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {

// 사전순으로 정렬하기
return s1.charAt(n) - s2.charAt(n);

// 사전순 역순으로 정렬하기
//return s2.charAt(n) - s1.charAt(n);

}
});
// lamda
// Arrays.sort(strings,(s1,s2) -> s1.charAt(n) - s2.charAt(n););
System.out.println(Arrays.toString(strings));

}
}
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
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class 문자열내마음대로정렬하기 {
/* ArrayList를 사용한 풀이
public static void main(String[] args) {
String[] strings = {"sun", "bed", "car"};
int n = 1;
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());
} System.out.println(Arrays.toString(strings));

}
}