문제
풀이
이게 어떻게 Comparator로 풀릴까 참 고민이 많았던 문제....
옆의 숫자와 비교해 (str1+str2)와 (str2+str1) 중 큰 숫자, 즉 내림차순으로 정렬만 해주면 끝나는 문제
내부 로직은 어떤 순서로 진행되는지, 어떤 알고리즘이 쓰이는지 알 수 없지만 참말루 참신하다잉
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] strArr = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
strArr[i] = Integer.toString(numbers[i]);
}
Arrays.sort(strArr, (o1, o2) -> (o2+o1).compareTo(o1+o2));
answer = String.join("", strArr);
if(answer.charAt(0)=='0') return "0";
return answer;
}
}
짱 멋있는 보석쓰 코드도 루팡해옴...
이런 사람이랑 이제 코테 경쟁을 해야 된다니 넘모 무서워 살살해줘. 아니 내가 이길 때까지 한다.
"numbers의 원소는 0 이상 1,000 이하입니다."라는 조건을 보고
배열안의 각 숫자를 자기자신 포함 3번 반복되게 붙여준다 ex) 3 -> 333, 34 -> 343434
그 후, 앞자리 3개만 비교해 내림차순으로 정렬해준 뒤, 모두 붙여서 출력하면 끝.
import java.util.*;
class Solution {
static class Node{
int idx;
String value;
public Node(int idx, String value) {
this.idx = idx;
this.value = value;
}
public String getValue() {
return value;
}
public int getIdx() {
return idx;
}
}
public String solution(int[] numbers) {
ArrayList<Node> arrayList = new ArrayList<>();
int idx = 0;
for (int x : numbers) {
arrayList.add(new Node(idx, String.valueOf(x) +String.valueOf(x) +String.valueOf(x)));
idx ++;
}
arrayList.sort(Comparator.comparing(Node::getValue)
.thenComparing(Node::getIdx)
.reversed());
String res = "";
for (Node n : arrayList) {
if (!res.equals("0")) {
res += Integer.parseInt(String.valueOf(numbers[n.idx]));
}
}
return res;
}
}
'SQL > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] 피로도 - 완전탐색 (0) | 2023.12.20 |
---|---|
[SQL] 입양 시각 구하기2 (0) | 2023.11.21 |
[SQL] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.11.21 |
[SQL] 성분으로 구분한 아이스크림 총 주문량 (0) | 2023.11.21 |
[SQL] 입양 시각 구하기 (1) | 2023.11.21 |