모바일 개발하는 자바리안의 메모장

자바(JAVA) - 가장 큰 수(Programmers : 42746) 본문

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;
    }
}

 

 

반응형
Comments