Algorithms/- 프로그래머스

프로그래머스 - 가장 큰 수 [자바]

자굿 2022. 2. 17. 23:34
 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

정답(Solution)

import java.util.*;

class Solution {
    public String solution(int[] numbers) {

        String[] arr = Arrays.stream(numbers)
            .boxed()
            .map(String::valueOf)
            .sorted((a, b) -> (b+a).compareTo(a+b))
            .toArray(String[]::new);

        if(arr[0].equals("0")){
            return "0";
        }

        StringBuilder sb = new StringBuilder();

        for(String str : arr){
            sb.append(str);
        }

        return sb.toString();
    }
}

 

분석

  • dfs문제인줄 알았는데 정렬 문제였다.

  • int로 생각하니까 dfs로 풀어야 되는 문제인줄 알았는데 String으로 변환하고
    비교하면 원하는 순서로 정렬이 되어 마지막에 하나의 String으로 변환해주면 되었다.

  • 하지만 dfs로도 풀 수 있을 것 같기는 하다. (시간초과로 실패될 것 같기는 하다.)
반응형