처음에는 생각을 잘못해서 틀렸다.. 두번 틀렸다
숫자를 받아서 String으로 변환해서 맨 앞자리부터 비교하는식으로 했는데 너무 복잡하게 생각한 것 같다.
import java.io.*;
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
Integer[] arr = new Integer[numbers.length];
for(int i=0 ; i<numbers.length; i++){
arr[i] = new Integer(numbers[i]);
}
Arrays.sort(arr, new Comparator<Integer>(){
@Override
public int compare(Integer a, Integer b){
String tempa = a.toString();
String tempb = b.toString();
int max = tempa.length() > tempb.length()? tempa.length():tempb.length();
int min = tempa.length() > tempb.length()? tempb.length():tempa.length();
// System.out.println(tempa + " " + tempb + " " + compare_range);
for(int i=0; i<min; i++){
if(Integer.parseInt(tempa.substring(i,i+1))!=Integer.parseInt(tempb.substring(i,i+1))){
return -(Integer.parseInt(tempa.substring(i,i+1))-Integer.parseInt(tempb.substring(i,i+1)));
}
}
return -(tempa.length()-tempb.length());
// return 1;
}
});
System.out.println(Arrays.toString(arr));
for(int a : arr)
answer+=Integer.toString(a);
return answer;
}
}
반례)
[3, 30, 34, 5, 9] 9534330
이렇게 나와야되는데 위 코드 돌리면
3이랑 30중 길이가 긴게 앞으로 오므로
9534303 이렇게 나옴 ㅠㅠ
구글링 해봤더니 숫자를 문자로 바꾸는것까지는 똑같은데 나처럼 그 string을 쪼개서 비교한게 아니고 스트링 두개를 붙여서 a+b 한거랑 b+a 한것중에 큰 값이 되도록 배열 순서를 바꿔주면 된단다.. ^_^....
import java.io.*;
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
Integer[] arr = new Integer[numbers.length];
for(int i=0 ; i<numbers.length; i++){
arr[i] = new Integer(numbers[i]);
}
Arrays.sort(arr, new Comparator<Integer>(){
@Override
public int compare(Integer a, Integer b){
String tempa = a.toString();
String tempb = b.toString();
String t1 = tempa+tempb;
String t2 = tempb+tempa;
return -(Integer.parseInt(t1)-Integer.parseInt(t2));
}
});
System.out.println(Arrays.toString(arr));
for(int a : arr)
answer+=Integer.toString(a);
return answer;
}
}
다 맞을 줄 알았는데 또 하나 틀림
아까 블로그에서 무슨 예외처리 하나 해주는거 봤는데 그거같다.. 뭘 예외처리해야되는지 한번 보고와야겠다.
import java.io.*;
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
Integer[] arr = new Integer[numbers.length];
for(int i=0 ; i<numbers.length; i++){
arr[i] = new Integer(numbers[i]);
}
Arrays.sort(arr, new Comparator<Integer>(){
@Override
public int compare(Integer a, Integer b){
String tempa = a.toString();
String tempb = b.toString();
String t1 = tempa+tempb;
String t2 = tempb+tempa;
return -(Integer.parseInt(t1)-Integer.parseInt(t2));
}
});
if(arr[0]==0)
return "0";
for(int a : arr)
answer+=Integer.toString(a);
return answer;
}
}
최종 코드! 예외처리는 아래서 7번째줄에 if(arr[0]==0=)일 때!
정렬을 했기때문에 03453 이런값은 안나올테니 맨앞에 0이 있다는 것은 0이거나 00...00 이런식으로 되어있다는 의미인데 0이 아무리 많아도 숫자니까 '0'으로 리턴해야되므로 예외처리 해줘야 함.
'알고리즘' 카테고리의 다른 글
[프로그래머스/Java] 위장 - Hashmap, 조합 (0) | 2020.09.05 |
---|---|
[프로그래머스/Java] 전화번호목록 - Hashmap 풀이 (0) | 2020.09.05 |
[프로그래머스/Java] 완주하지 못한 선수 - HASHMAP 풀이 (0) | 2020.09.05 |
[추천] 알고리즘 사이트 추천 - hackerrank (0) | 2020.09.04 |
[백준/2914] 저작권 (0) | 2020.09.03 |