https://programmers.co.kr/learn/courses/30/lessons/42746?language=java
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
사실 처음에는 접근하는 방법이 막막했었다. 왜냐하면 단순히 Arrays.sort() 같은 정렬을 했을 때에는 37 같은 숫자가 4보다 크다고 정렬이 되기 때문이다. 그리고 반복문을 중첩해서 해결할 수 있을 것 같기도 했지만 최대 원소 갯수가 10만 개였기 때문에 시간초과에 대한 리스크가 굉장히 컸었다.
그래서 다른 방법을 구글링해보다가 이 sort 함수를 자체적으로 오버라이드해서 정의해서 사용할 수 있다는 것을 알게 되었다. 결국 숫자 형식의 값을 String으로 바꾼 후, 이 String 값들을 다시 비교해서 리턴하는 식으로 해결했다.
import java.util.Arrays;
import java.util.Comparator;
class Solution
{
public String solution(int[] numbers)
{
int n = numbers.length;
String[] str = new String[n];
String answer = "";
for(int i=0; i<n; i++)
{
str[i] = numbers[i] + "";
}
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String a, String b)
{
return (b+a).compareTo(a+b);
}
});
if(str[0].equals("0"))
{
return "0";
}
for(int i=0; i<n; i++)
{
answer += str[i];
}
return answer;
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[프로그래머스] 레벨3 등굣길 (0) | 2021.08.02 |
---|---|
[구름] 레벨2 홀수의 합 (0) | 2021.08.02 |
[구름] 레벨2 최단거리 (0) | 2021.08.01 |
[구름] 레벨2 삼각형의 넓이2 (0) | 2021.07.30 |
[프로그래머스] 레벨2 방문길이(완성) (0) | 2021.07.30 |
댓글