반응형
출처 : programmers.co.kr/learn/courses/30/lessons/42746
알게된 점
1. 정수형 -> 문자열로 바꾸는 법
1-1) String.valueOf( 정수 )
1-2) Integer.toString( 정수 )
2. 문자열 크기 비교하기
1-1) "3".compareTo("30")
- 사전 순으로 작으면 -1 , 같으면 0 , 크면 1 return;
- 3 < 30 으로 인식 따라서 -1 리턴
ex. 4.compareTo("30")
- 4가 30보다 앞에 나오기 때문에 1 리턴
2) But, 기본 정렬방식은 오름차순으로 -1 이면 왼쪽 / 1이면 오른쪽으로 정렬된다.
따라서 우리가 구하고자 하는 것은, 큰 순서이기 때문에 앞에 - 부호 붙이기.
3. Comparator 는 왜 익명 클래스로 밖에 사용이 안될까? ㅜ
4. 주의할 점은 만약 정렬했는데 맨앞이 0 이라는 소리는, 입력 값이 0 0 00 0 0 이라는 말이다.
따라서, 그냥 0을 리턴해줘야 마지막 케이스에 안걸린다..ㅠㅠ 어렵당
풀이 - 1 ( 단순 문자열 비교하면 틀림 )
ex. 3 과 30 비교하면 30이 더 크게나온다. ( 사전 순 ) - 실제는 330 과 303 과 같이 순서에 따라 크기가 달라짐
import java.util.*;
class Solution {
static ArrayList<Number> number ;
public static class Number implements Comparable<Number>{
String number;
public Number(String number){
this.number = number;
}
@Override
public int compareTo(Number o){
return -this.number.compareTo(o.number);
}
}
public String solution(int[] numbers) {
String answer ="";
number = new ArrayList<>();
for( int i=0; i<numbers.length; i++){
number.add(new Number(String.valueOf(numbers[i])));
}
Collections.sort(number);
for( int i=0; i<number.size(); i++){
answer += number.get(i).number;
}
return answer;
}
}
풀이 - 2 - Comparator
import java.util.*;
class Solution {
static ArrayList<Number> number ;
public static class Number implements Comparator<Number>{
String number;
public Number(String number){
this.number = number;
}
@Override
public int compare(Number o1, Number o2){
return -(o1.number+o2.number).compareTo(o2.number+o1.number);
}
}
public String solution(int[] numbers) {
String answer ="";
number = new ArrayList<Number>();
//Number mycomparator = new Number();
for( int i=0; i<numbers.length; i++){
//number.add(new Number(String.valueOf(numbers[i])));
number.add(new Number(Integer.toString(numbers[i])));
}
//Collections.sort(number);
Collections.sort(number, new Comparator<Number>(){
@Override
public int compare(Number o1, Number o2){
return -(o1.number+o2.number).compareTo(o2.number+o1.number);
}
});
if( number.get(0).number.equals("0")) return "0";
for( int i=0; i<number.size(); i++){
answer += number.get(i).number;
}
return answer;
}
}
풀이 - 3 - Comparable
import java.util.*;
class Solution {
static ArrayList<Number> number ;
public static class Number implements Comparable<Number>{
String number;
public Number(String number){
this.number = number;
}
@Override
public int compareTo(Number o){
return -(this.number+o.number).compareTo(o.number+this.number);
}
}
public String solution(int[] numbers) {
String answer ="";
number = new ArrayList<Number>();
//Number mycomparator = new Number();
for( int i=0; i<numbers.length; i++){
//number.add(new Number(String.valueOf(numbers[i])));
number.add(new Number(Integer.toString(numbers[i])));
}
Collections.sort(number);
/*
Collections.sort(number, new Comparator<Number>(){
@Override
public int compare(Number o1, Number o2){
return -(o1.number+o2.number).compareTo(o2.number+o1.number);
}
});
*/
if( number.get(0).number.equals("0")) return "0";
for( int i=0; i<number.size(); i++){
answer += number.get(i).number;
}
return answer;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 구멍보트 Level 2 [JAVA] (0) | 2020.11.12 |
---|---|
[프로그래머스] 더 맵게 [java] (0) | 2020.11.09 |
[프로그래머스] 소수 찾기 Level 2 [ JAVA ] (0) | 2020.11.08 |
[프로그래머스] 베스트 앨범 [JAVA] (0) | 2020.11.08 |
[삼성 SW Expert Academy] 등산로 1949[JAVA] (0) | 2020.11.04 |