본문 바로가기
알고리즘/코딩 - 프로그래머스

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

by 주남2 2019. 3. 27.
반응형

문제 설명

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

 

제한 조건

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

생각

먼저 든 생각은 'Comparator을 사용하자!' 였다. Comparable와 Comparator 중 무엇을 사용할까 했는데 제한 조건중 인덱스의 문자가 같은 문자열이 있다면 사전순으로 정렬을 해야하므로 Sort함수 내에서만 적용시킬 수 있는 Comparator을 사용하기로 하였다. 

 

new Comparator을 사용해서 정렬을 하되 만약 원하는 인덱스의 값이 같다면 그때는 일반적인 비교인 compareto함수를 사용하고 아니 경우에는 각 인덱스의 문자를 char형태로 만들어 빼서 대소를 비교하는 형태로 만들기로 하였다.

 

[abcd, aaaa, bbcd, afed] 를 인덱스 1로 비교하고자 할때 각 요소의 1번 인덱스는 b a b f이다. 이 경우 a b b f형태가 되는데 이 때 두번째와 세번째는 겹치므로 이 둘은 사전으로 비교를 한다면 abcd가 bbcd보다 앞에 오게 된다.

결국 [abcd, aaaa, bbcd, afed] -> [aaaa, abcd, bbcd, afed]가 될 것이다. 

 

코드

뭐지..에디터가 바뀐이후로 code scripter가 이상하다..뭔가 어색해졌다. 에디터가 이뻐진건 엄청난 발전이지만 아직 베타버전이라 수정이 필요해보인다.

 

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.*;
 
class Solution {
      public String[] solution(String[] strings, int n) {
          String[] answer = {};
                    
          
          Arrays.sort(strings, new Comparator<String>() {
 
            @Override
            public int compare(String arg0, String arg1) {
                
                if(arg0.charAt(n) == arg1.charAt(n)) {
                    return arg0.compareTo(arg1);
                }
                
                return arg0.charAt(n) - arg1.charAt(n);
            }
        });
          
          answer = new String[strings.length];
          
          for(int i=0; i<strings.length; i++) {
              answer[i] = strings[i];
          }
          
          return answer;
      }
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

 

 
반응형