문제
https://programmers.co.kr/learn/courses/30/lessons/42746
풀이
[6, 10, 2] | "6210" |
숫자를 String으로 변환 한 후, 인접 한 숫자끼리 합쳐서 사전 순서를 비교한다.
순서대로 합친 문자열이 사전의 뒷 순서가 되도록 숫자의 위치를 변경해준다.
[6, 10, 2]
6, 10 = 610
10, 6 = 106
610이 사전의 뒷 순서이므로 변경하지 않는다.
[6, 10, 2]
10, 2 = 102
2, 10 = 210
210이 사전의 뒷 순서이므로 순서를 변경한다.
[6, 2, 10]
6, 2 = 62
6, 2 = 26
순서를 변경하지 않는다.
답: 6210
Java의 Comparator로 정렬 조건을 구현한다.
String s1, String s2 문자가 있을 때
a = s1 + s2
b = s2 + s1
a.compareTo(b) == 0 : a 와 b 값이 동일.
a.compareTo(b) > 0 : a의 사전 순서가 b보다 뒤이다.
a.compareTo(b) < 0 : a의 사전 순서가 b보다 앞이다.
@Override
public int compare(String s1, String s2){
String a = s1 + s2;
String b = s2 + s1;
int rs = a.compareTo(b);
if(rs == 0){
return 0;
} else if(rs > 0) {
return -1;
} else {
return 1;
}
}
소스코드
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
List<String> list = new ArrayList<String>();
boolean allZero = true;
for(int number : numbers){
if(allZero && number != 0) allZero = false;
list.add(String.valueOf(number));
}
if(allZero) return "0";
Collections.sort(list, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
String a = s1 + s2;
String b = s2 + s1;
int rs = a.compareTo(b);
if(rs == 0){
return 0;
} else if(rs > 0) {
return -1;
} else {
return 1;
}
}
});
for(String n : list){
answer += n;
}
return answer;
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 (Java) (0) | 2022.01.20 |
---|---|
[프로그래머스] 코딩테스트 고득점 Kit (Java) (0) | 2021.12.08 |
[프로그래머스] 최고의 집합 (Java) (0) | 2021.12.08 |
[프로그래머스] 메뉴 리뉴얼 (Java) (0) | 2021.12.08 |
[프로그래머스] 징검다리 (Java) (3) | 2021.12.07 |