반응형
이 문제도 쉽게 잘 풀렸다고 생각했고, 문제의 예제가 내가 대입한 숫자로는 결과가 잘 나왔다.
하지만 테스트 33.3 점을 받았다..ㅎㅎ 이 정도면 예제가 운 좋게 맞은 수준..
public String solution(int[] numbers) {
String answer = "";
Integer[]numbers2 = Arrays.stream(numbers).boxed().toArray(Integer[]::new);
Arrays.sort(numbers2, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if(o1.toString().charAt(0) == o2.toString().charAt(0)) {
if(o1.toString().length() != o2.toString().length()) {
if(o1.toString().length() > o2.toString().length()) {
String temp = null;
for(int i= 0; i<o1.toString().length()-1; i++) {
if(i==0) {
temp = o2.toString();
}
temp = temp + o2.toString();
}
return Integer.parseInt(temp) - o1;
}else {
String temp = null;
for(int i= 0; i<o2.toString().length()-1; i++) {
if(i==0) {
temp = o1.toString();
}
temp = temp + o1.toString();
}
return o2 - Integer.parseInt(temp);
}
}
return o2 - o1;
}else {
return o2.toString().charAt(0) - o1.toString().charAt(0);
}
}
});
for(int num : numbers2) {
answer = answer + num;
}
return answer;
}
그래서 이번엔 Integer Array가 아닌 String Array로 변환하여 Sorting하였다.
예를들어 3, 34를 비교할 때 "3"+"34" = "334"와 "34"+"3" = "343" 을 비교하여 내림차순 정렬되도록 처리했다.
public String solution(int[] numbers) {
String answer = "";
String[] strArr = Arrays.stream(numbers).mapToObj(String :: valueOf).toArray(String[]::new);
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int a = Integer.parseInt(o2+o1);
int b = Integer.parseInt(o1+o2);
return a-b;
}
});
for(String str : strArr) {
answer = answer + str;
}
return answer;
}
하지만 또 테스트 코드 하나가 통과하지 못했고, 이유를 찾아보니 0만 있는 배열의 경우 0을 리턴해야하는데 000 이런식으로 리턴하고 있었다.
int i = Integer.parseInt(answer);
if(i == 0) {
return "0";
}
이 코드를 추가했는데 런타임에러가 우수수 떨어지더라.. 테스트 케이스 중 숫자가 큰 경우 int 범위 밖이라 그런듯..
아래와 같이 소스를 수정하여 테스트에 통과하였다!
public String solution(int[] numbers) {
String answer = "";
String[] strArr = Arrays.stream(numbers).mapToObj(String :: valueOf).toArray(String[]::new);
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int a = Integer.parseInt(o2+o1);
int b = Integer.parseInt(o1+o2);
return a-b;
}
});
int zeroCnt = 0;
for(String str : strArr) {
int i = Integer.parseInt(str);
if(i ==0) {
zeroCnt++;
}
answer = answer + str;
}
if(zeroCnt == strArr.length) {
return "0";
}
return answer;
}
728x90
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스/JAVA] 로또의 최고 순위와 최저 순위 (0) | 2022.07.24 |
---|---|
[프로그래머스/JAVA] 신고 결과 받기 (1) | 2022.07.24 |
[프로그래머스/JAVA] K번째수 - 정렬 (0) | 2022.02.20 |
[프로그래머스/JAVA] 베스트 앨범 - 해시 (0) | 2022.02.20 |
[프로그래머스/JAVA] 위장 - 해시 (0) | 2022.02.18 |
댓글