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

유재경·2020년 9월 25일
0

프로그래머스(level 1)

목록 보기
12/15

#2020. 09. 25

문제 설명

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

제한 사항

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

입출력 예

stringsnreturn
["sun", "bed", "car"]1["car", "bed", "sun"]
["abce", "abcd", "cdx"]2["abcd", "abce", "cdx"]

풀이

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
        int length = strings.length - 1;
        for(int i = 0; i < length; i++) {
            for(int j = 0; j < length - i; j++) {
                if(compareString(strings[j], strings[j + 1], n, n)) {
                    swap(strings, j, j + 1);
                }
            }
        }
        return strings;
    }
    public boolean compareString(String string1, String string2, int n, int num) {
        if(string1.charAt(num) > string2.charAt(num)) return true;
        else if(string1.charAt(num) == string2.charAt(num)) {
            int next = n == num ? 0 : ++num;
            if(n == next) next++;
            return compareString(string1, string2, n, next);
        }
        else return false;
    }
    public void swap(String[] strings, int num1, int num2) {
        String temp = strings[num1];
        strings[num1] = strings[num2];
        strings[num2] = temp;
    }
}

테스트케이스는 풀렸지만, 채점에서 계속 오답이 나오고, 너무 시간이 오래 걸려서 다른 사람의 풀이를 참고했습니다. 단어들의 인덱스를 기준으로 해서 비교하는 것을 함수로 구현을 했더라구요. 인덱스 비교한 함수의 리턴값이 true인 경우, 배열 내에서 두 단어의 순서를 교체해줍니다. 만약, 단어의 n번째가 같으면 해당 단어들의 0번째 알파벳부터 비교를 합니다!
저도 참고해서 풀었습니다 !

profile
차근차근히 시작해보는 velog

0개의 댓글