Java/Java.algorithm
자바(JAVA) - 가장 큰 수(Programmers : 42746)
자바리안
2021. 6. 10. 14:12
반응형
https://programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
Comparator 를 이용한 정렬 문제로 답을 구할 수 있는 문제. Output은 주어진 정수를 나열하였을 때 가장 큰 수를 반환해야 함 되어야 함. 처음엔 Integer 연산으로 결과값을 만들어보려 했지만, String으로 변환 & 정렬을 통해 훨씬 효율적인 방법으로 해답을 만들어낼 수 있었음.
실행 순서는 다음과 같다 :
1. Input int[] > String[]로 변환
2. Comparator를 사용하여 String 정렬
* String s1, s2 를 args로 받는 Comparator로 두 스트링의 Concat. 값이 더 큰 것부터 정렬
3. 정렬한 Array 의 모든 값 Concat.
4. 결과값이 0인 경우에 대한 추가 조건문
* 맨 앞자리가 0이면 0 반환
<코드>
import java.util.*;
class Solution {
public String solution(int[] numbers) {
int len = numbers.length;
String[] result = new String[len];
// 숫자 > String으로 파싱하여 array에 입력
for(int i = 0; i < len; i++)
result[i] = numbers[i] + "";
// Lambda 를 이용한 Comparetor 생성
// 두개 String(s1,s2) 의 Concat 값이 큰 것부터 오도록 정렬
Comparator<String> com = (s1, s2) -> (s2 + s1).compareTo(s1+ s2);
// String Array 정렬
Arrays.sort(result, com);
String answer = "";
for(String s : result)
answer += s;
if(answer.charAt(0) == '0')
return "0";
return answer;
}
}
반응형