728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42746?language=java
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] str = new String[numbers.length];
for(int i=0; i<numbers.length; i++){ // 숫자배열을 String배열로 변환
str[i] = String.valueOf(numbers[i]);
}
Arrays.sort(str, new Comparator<String>(){
@Override
public int compare(String a, String b){
return (b+a).compareTo(a+b); // 내림차순 정렬
}
});
if(str[0].equals("0")) return "0";
for(String s:str) answer += s;
return answer;
}
}
처음에는 그냥 Arrays.sort(str)로만 했는데 값이 깨져서 들어갔다.
키포인트는
Arrays.sort(str, new Comparator<String>(){
@Override
public int compare(String a, String b){
return (b+a).compareTo(a+b);
}
});
a.compareTo(b)
- 앞에서부터 비교하다 다른 문자열이 나오면 'a-b' 순서로 해당 문자의 아스키코드 값을 뺀 결과(int)를 리턴
정렬 시 비교할 문자가 o1와 o2라면 o1+o2와 o2+o1를 비교한 뒤에 더 큰 수를 반환해줘야 한다.
내림차순 : (o2+o1).compareTo(o1+o2);
오름차순 : (o1+o2).compareTo(o1+o2);
람다식 풀이
람다식은 Comparator와 같이 딱 하나의 추상 메소드만 가진 인터페이스를 구현할 때 사용할 수 있는 문법이다.
* 람다식 한줄 문법
- (매개변수) -> 명령문; (리턴값이 있다면 자동으로 수행 결과가 리턴됨)
* 람다식 여러줄 문법
- (매개변수) -> { 명령문; 명령문; 명령문; return; }
위에서 Comparator 로직은 한줄이므로 아래와 같이 작성할 수 있다.
Comparator<String> comp = (a, b) -> (b + a).compareTo(a + b);
Arrays.sort(result, comp);
//혹은
Arrays.sort(result, (a,b) -> (b+a).compareTo(a+b));
출처 :
https://ivory-room.tistory.com/43
https://codevang.tistory.com/294
728x90
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/JAVA] 카펫 (0) | 2022.02.07 |
---|---|
[프로그래머스/Java] 모의고사 (0) | 2022.01.20 |
[프로그래머스/JAVA] K번째 수 (0) | 2022.01.12 |
[프로그래머스/Java] 이중우선순위큐 (0) | 2022.01.10 |
[프로그래머스/JAVA] 더 맵게 (0) | 2021.12.30 |