[Programmers] 가장 큰 수
2023. 9. 18. 18:13ㆍComputer Sciences/Problem Solve
https://school.programmers.co.kr/learn/courses/30/lessons/42746
문제 설명
주어진 숫자들을 이어붙여서 가장 큰 수를 만들면 되는 문제이다.
처음엔 문자열 배열에 넣고 정렬했다. 이렇게 하면 사전 순서대로 정렬되므로 이어 붙이기 수월했다. 그러나 34, 3, 30 과 같은 경우에 문제가 생겼다. 이런 경우를 어떻게 해야 할까 생각하다 다른 사람의 풀이를 보았는데 아주 간단했다. 정렬을 앞 문자열 + 뒷 문자열과 뒷 문자열 + 앞 문자열을 한 값으로 하면 되는 것이었다. 예를 들어 30, 3이 있다고 하면 303과 330으로 비교를 하게 되므로 303.compareTo(330)을 하면 1이 반환되므로 330이 앞으로 정렬된다. 참고로 compareTo를 활용하여 정렬을 하는 경우 compareTo의 결과가 양수면 두 원소의 위치를 변경하고 그 외에는 유지한다.
코드
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
String[] strnums = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
strnums[i] = String.valueOf(numbers[i]);
}
Arrays.sort(strnums, (s1, s2) -> (s2 + s1).compareTo(s1 + s2));
if (strnums[0].equals("0")) {
return "0";
}
String answer = "";
for (int i = 0; i < strnums.length; i++) {
answer += strnums[i];
}
return answer;
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Programmers] 디펜스 게임 (0) | 2023.09.19 |
---|---|
[Programmers] 숫자 카드 나누기 (0) | 2023.09.18 |
[Programmers] 숫자 짝꿍 (0) | 2023.09.14 |
[Programmers] 대충 만든 자판 (0) | 2023.09.14 |
[Programmers] 행렬 테두리 회전하기 (0) | 2023.09.13 |