[프로그래머스/Level2] 가장 큰 수(Java)

SeokHyun·2022년 6월 29일
0

프로그래머스

목록 보기
5/32

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42746#

문제 접근

혼자서 하려다가 도저히 모르겠어서 질문하기를 통해 답을 참고했다.

핵심은 두 문자열을 합쳐서 가장 큰 수를 찾는 것이다.

예를 들면, 다음과 같은 배열이 있다고 하자

[1, 31, 200]

131에서 가능한 수 조합은 131, 311이다.

311이 더 크므로 정렬이 [31, 1, 200]와 같이 변경되어야한다.

이 과정을 반복하면 되는 것이다.

소스 코드

import java.util.*;
import java.util.stream.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        List<String> strList = new ArrayList<>();
        for (int num : numbers) {
            strList.add(Integer.toString(num));
        }

        StringBuilder sb = new StringBuilder();
        strList.stream()
                .sorted((s1, s2) -> {
                    int a = Integer.parseInt(s1 + s2);
                    int b = Integer.parseInt(s2 + s1);
                    return b - a;
                })
                .forEach(sb::append);
        
        answer = sb.toString();
        return answer.charAt(0) == '0' ? "0" : answer;
    }
}
profile
SI를 넘어 백엔드 엔지니어를 향하여

0개의 댓글