programmers.co.kr/learn/courses/30/lessons/42746
1. 유형
정렬
2. 풀이
추상화
- 정렬
- 문자열로 변환
다른 정렬문제와는 다르게 Int를 정렬하는게 아니라, 문자열을 정렬한다는 점이 색달랐다.
static class Node implements Comparable<Node>{
String n;
Node(String n){
this.n=n;
}
@Override
public int compareTo(Node o){
int a = Integer.valueOf(this.n+o.n);
int b = Integer.valueOf(o.n+this.n);
return -(a-b);
}
}
[6 10 2]인 경우,
위 코드에서 "6" + "10" > "10" + "6" 이다. 따라서 6 10 순으로 정렬돼야 한다.
이렇게 정렬하면 된다.
이떄, 반례가 존재한다. [0 0 0 0 0]처럼 0이 여러번 나올 수 있다.
그래서 마지막에 00000은 0으로 치환해줘야 한다.
3. 코드
import java.util.*;
class Solution {
static class Node implements Comparable<Node>{
String n;
Node(String n){
this.n=n;
}
@Override
public int compareTo(Node o){
int a = Integer.valueOf(this.n+o.n);
int b = Integer.valueOf(o.n+this.n);
return -(a-b);
}
}
public String solution(int[] numbers) {
String answer = "";
ArrayList<Node> list = new ArrayList<>();
for(int i=0; i<numbers.length; i++){
list.add(new Node(String.valueOf(numbers[i])));
}
Collections.sort(list);
for(int i=0; i<list.size(); i++){
answer+=list.get(i).n;
}
if(answer.charAt(0) == '0')
answer = "0";
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 스킬트리 (0) | 2021.03.30 |
---|---|
프로그래머스 - 순위 (0) | 2021.03.27 |
프로그래머스 level2 - 위장 (0) | 2021.03.23 |
2021 카카오공채 - 신규 아이디 추천 (0) | 2021.02.28 |
프로그래머스 level2 - 소수 찾기 (0) | 2020.04.06 |