[PGS] 접미사 배열

Organ·2023년 12월 5일
0

[문제 풀이]

목록 보기
122/123

문제

내 풀이(틀림)

예제는 풀리는데 통과가 안된다.

public class Main {
    public static void main(String[] args) {
        solution("important");
    }

    public static String[] solution (String str){

        int a = str.length();
        String[] arr = new String[a];

        int c1 = 0;
        int c2 = 0;
        int c3 = 0;
        String abc = "";

        // 배열 만드는 과정
        for (int i = 0; i < a; i++) {
            arr[i] = str.substring(i, a);
        }

        // 정렬
        for (int k = 0; k < a - 1; k++) {
            for (int i = 0; i < a - 1; i++) {
                boolean flag = false;
                c1 = arr[i].length();
                c2 = arr[i + 1].length();

                // 길이가 짧은 문자열의 길이만큼 긴 문자열을 잘라서 두개가 똑같다면 길이가 긴 문자열이 뒷순서이니 flag 를 true로 바꿔줌
                // c3는 짧은 문자열의 길이를 담기 위한 것
                if (c1 > c2) {
                    c3 = c2;
                    if (arr[i].substring(0, c2).equals(arr[i + 1]) || arr[i].substring(1).equals(arr[i + 1]))
                        flag = true;
                } else {
                    c3 = c1;
                }

                // 첫글자부터 길이가 짧은 문자열의 길이만큼 문자열의 각 문자를 비교하여 flag 변경해줌
                for (int j = 0; j < c3; j++) {

                    if(c3 >= 2) {
                        if (arr[i].charAt(0) == arr[i + 1].charAt(0)) {
                            if (arr[i].charAt(1) > arr[i + 1].charAt(1)) {
                                flag = true;
                                break;
                            }
                            if(arr[i].charAt(1) == arr[i + 1].charAt(1))
                            {
                                if (arr[i].charAt(2) > arr[i + 1].charAt(2)) {
                                    flag = true;
                                    break;
                                }
                            }
                        }
                    }

                    if (arr[i].charAt(j) > arr[i + 1].charAt(j)) {
                        flag = true;
                        break;
                    }
                    /////////////////////////////
                    // 이거 안넣어서 계속 틀림........................
                    else
                        break;
                }

                // flag가 true라면 자리 변경
                if (flag) {
                    abc = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = abc;
                }
            }

        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        return arr;
    }
}

0개의 댓글