Skip to main content Link Search Menu Expand Document (external link) Copy Copied

문제

문제 설명

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

제한 조건

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

입출력 예

strings n return
[“sun”, “bed”, “car”] 1 [“car”, “bed”, “sun”]
[“abce”, “abcd”, “cdx”] 2 [“abcd”, “abce”, “cdx”]

입출력 예 설명:

입출력 예 1

“sun”, “bed”, “car”의 1번째 인덱스 값은 각각 “u”, “e”, “a”입니다. 이를 기준으로 strings를 정렬하면 [“car”, “bed”, “sun”] 입니다.

입출력 예 2

“abce”, “abcd”, “cdx”의 2번째 인덱스 값은 “c”, “c”, “x”입니다. 따라서 정렬 후에는 “cdx”가 가장 뒤에 위치합니다. “abce”와 “abcd”는 사전순으로 정렬하면 “abcd”가 우선하므로, 답은 [“abcd”, “abce”, “cdx”] 입니다.


제출 코드

class Solution {
public String[] solution(String[] strings, int n) {
int len = strings.length;
int cnt = n;
int num = 0;

        for(int i = 0; i < len; i++){
             for(int j = i + 1; j < len; j++){
                if(strings[i].charAt(cnt) > strings[j].charAt(cnt)){
                    change(i,j,strings);
                }else if(strings[i].charAt(cnt) == strings[j].charAt(cnt)){
                    if(strings[i].compareTo(strings[j]) > 0){
                       change(i,j,strings);
                    }
                }
            }
        }

        return strings;
    }
    
    private String[] change(int i, int j, String[] strings){
        String temp = strings[i];
        strings[i] = strings[j];
        strings[j] = temp;
        return strings;
    }
}

제출 코드 설명

처음에는 substring을 이용한 방법을 생각했지만 개미 수열 때가 생각나서 문자형끼리 비교하여 위치를 바꿔주는 방법으로 풀이했고 사전식으로 정렬을 하라는 두 번째 조건은 compareTo()로 해결했다.


제출 코드 요약

  1. charAt 메서드는 문자열에서 문자형을 가져오는 메서드이다.
  2. 문자형 끼리 비교 시에는 아스키코드로 변환된다.
  3. compareTo 메서드는 문자열의 크기 비교를 해준다.
  4. 버블 정렬(Bubble Sort)을 이용했다.