안녕하세요. 그린주입니다 ๑'ٮ'๑
프로그래머스 코딩 테스트 시작!
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고,
이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,
순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록
solution 함수를 작성해주세요.
제한사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
예제 #1
입출력 예
int[] numbers = {6, 10, 2}
입출력 예 설명 // 정답 : "6210"
순서를 재배치하였을 때 가장 큰 수는 6210입니다.
예제 #2
입출력 예
int[] numbers = {3, 30, 34, 5, 9}
입출력 예 설명 // 정답 : "9534330"
순서를 재배치하였을 때 가장 큰 수는 9534330입니다.
내 코드
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
String answer = "";
// String 배열로
String[] strNumbers = Arrays.stream(numbers)
.mapToObj(String::valueOf)
.toArray(String[]::new);
// 내림차순 정렬
Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));
// 배열에 0밖에 없을 경우 0만 보냄
if (strNumbers[0].equals("0")) {
return "0";
}
// 정렬된 숫자 붙이기
for (String s : strNumbers) {
answer += s;
}
return answer;
}
}
Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));
A.compareTo(B)는 A와 B가 같을 경우 0을 리턴, A가 B보다 클 경우 양수로 리턴, A가 B보다 작을 경우 음수로 리턴됩니다.
예제 2의 30과 3으로 예를 들면, a = 30, b = 3이고 내림차순 정렬을 하기 위해 A 자리에는 (b + a)로 설정합니다.
코드는 ("3" + "30").compareTo("30" + "3")이 되고, 결과는 "330"이 "303"보다 크기 때문에 양수로 리턴합니다.
즉 3, 30 순으로 정렬됩니다.
긴 글 봐주셔서 감사합니다!
오늘도 행복한 하루 보내세요 ✿'◡'✿
참고
[JAVA] int, String 배열의 오름차순, 내림차순 정렬
Convert int array to string array in Java
'🌜 Algorithm > Programmers' 카테고리의 다른 글
2022 KAKAO BLIND RECRUITMENT - Lv1 신고 결과 받기 ( 프로그래머스 / JAVA ) (0) | 2022.07.08 |
---|---|
정렬 - Lv3 H-Index ( 프로그래머스 / JAVA) (0) | 2022.04.20 |
정렬 - Lv1 K번째수 ( 프로그래머스 / JAVA ) (0) | 2022.04.06 |
스택/큐 - Lv4 주식가격 ( 프로그래머스 / JAVA ) (0) | 2022.04.06 |
스택/큐 - Lv3 다리를 지나는 트럭 ( 프로그래머스 / JAVA ) (0) | 2022.04.06 |