본문 바로가기
  • Jetpack 알아보기
프로그래머스 - JAVA/Level 1

[JAVA] 프로그래머스 Lv.1 : 문자열 내 마음대로 정렬하기

by 새우버거♬ 2021. 4. 4.

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.

예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

 

 

예제:

 

Input:
strings : ["sun", "bed", "car"], n : 1
Output:

["car", "bed", "sun"]

Input:
strings : ["abce", "abcd", "cdx"], n : 2
Output:

["abcd", "abce", "cdx"]

 

제한 조건:

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

 


 

Solution #1

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings, (o1, o2) -> {
            if (o1.charAt(n) > o2.charAt(n)) return 1;
            else if (o1.charAt(n) < o2.charAt(n)) return -1;
            return o1.compareTo(o2);
        });
	      
        return strings;
    }
}

 

Result #1

 

💡 Comparator 인터페이스의 compare() 함수를 오버라이드해서 재정의하였다.

 

 


 

Solution #2

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
        for (int i = 0; i < strings.length; i++) {
            strings[i] = strings[i].charAt(n) + strings[i];
        }

        Arrays.sort(strings);
        
        for (int i = 0; i < strings.length; i++) {
            strings[i] = strings[i].substring(1);
        }
        
        return strings;
    }
}

 

Result #2

 

💡 기존 배열 값에서 인덱스 n번째 글자를 첫번째에 붙이고, Arrays.sort() 로 정렬했다. 정렬한 후, substring()으로 첫번째 글자를 제거하니 최악의 실행 시간이 나왔다.

 

 

 


 

More Algorithm!

 

👇👇

 

github.com/ggujangi/ggu.programmers

 

ggujangi/ggu.programmers

프로그래머스 알고리즘, JAVA. Contribute to ggujangi/ggu.programmers development by creating an account on GitHub.

github.com

 

 

 

출처 : 프로그래머스