강의로 돌아가기
조동근

(Java) 1,2,3,5,6 케이스 런타임 에러나요ㅠㅠ

질문하기에 올라온 정보들은 모두 성공하였는데
1,2,3,5,6 케이스는 런터임 에러가 나네요
4번을 실패고, 나머지 케이스는 성공으로 떴습니다.

제 코드의 아이디어는 compare 함수를 이용하여 재귀함수로 구현하였고
요약하자면 맨 앞자리가 같으면 하나씩 자리수를 줄여서 다시 비교하고
한자리 vs 여러자리 (3, 30 같은 경우)가 나오면 한자리 숫자와 여러자리의 2번째 숫자를 compareTo로 비교하는 방식으로 구현하였습니다.

어디가 잘못됬는지 잘 모르겠어요ㅠㅠ 도와주시면 감사드리겠습니다.

작성중인 코드―Solution.java
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
30
31
32
33
import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] arr = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            arr[i] = (String.valueOf(numbers[i]));
        }
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                if (s1.equals(s2)) return 0;
                if ((s1.length() == 1 || s2.length() ==1) && s1.charAt(0)==s2.charAt(0)) {
                    if (s1.length() < s2.length()) {
                        return (String.valueOf(s2.charAt(1)).compareTo(s1));
                    } else if (s1.length() > s2.length()) {
                        return s2.compareTo(String.valueOf(s1.charAt(1)));
                    }
                }
                if (s1.charAt(0)==s2.charAt(0))
                    return compare(s1.substring(1), s2.substring(1));
                return s2.compareTo(s1);
            }
        });
        if (arr[0].equals("0")) return "0";
        for (int i = 0; i < arr.length; i++) {
            answer+=arr[i];
        }
        return answer;
    }
}
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.