문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어,
주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,
순서를 재배치하여 만들 수 있는
가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
import java.util.*;
public class 가장큰수 {
public static void main(String[] args) {
System.out.println(solution(new int[] {6,10,2}));
System.out.println(solution(new int[] {3,30,34,5,9}));
}
public static String solution(int[] numbers) {
String answer = "";
// 1. 문자로 바꾸고
// 2. 큰 순서대로 (내림차순) 정렬
// 3. 맨 앞으로 숫자가 0으로 시작을 할 경우는 0으로 출력
// 4. 문자 합치기
// 필요한거
// - rs : 숫자 합치는거, 결과
// 결과를 담을 배열 생성
String[] rs = new String[numbers.length];
// int배열 -> String배열로 변환
for(int i = 0; i < numbers.length; i++){
rs[i] = String.valueOf(numbers[i]);
}
// 내림차순 정렬
// (제일 큰거를 순서대로, 배열 정렬)
Arrays.sort(rs, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b+a).compareTo(a+b);
// 오름차순 정렬
// (o1+o2).compareTo(o1+o2);
}
});
// 내림차순으로 했기 때문에, 0이 나오면 0으로 결과 리턴
// 답이 000이 나오면 안되므로 첫번째값이 0이면 0을 리턴
if(rs[0].equals("0")){
return "0";
}
// 최종
// 0이 아니면 문자열을 더해줍니다.
for(String a:rs) {
answer += a;
}
return answer;
}
}
(참고)
Compare함수, compareTo() 사용하는 방법("비교하는 방법") - https://hijjang2.tistory.com/854
'Other > 코테 문제' 카테고리의 다른 글
[코테] 행렬 테두리 회전하기_2단계 (0) | 2021.06.13 |
---|---|
[코테] 땅따먹기_2단계 (0) | 2021.06.13 |
[코테] 주식가격_스택/큐_2단계 - "" - 못풀음------ (0) | 2021.05.09 |
[코테] 기능개발_스택/큐_2단계 - "Math.ceil()" (0) | 2021.05.08 |
[코테] 음양 더하기 (0) | 2021.04.28 |