본문 바로가기

코딩테스트/programmers

가장 큰 수

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

배열을 구성하는 정수가 1자리의 숫자라면 단순히 내림차순 정렬을 하면 되겠지만.. 0~1000 사이의 숫자이다.

 

예를 들어 3, 30 이라는 두 원소가 주어졌을 때 330이 큰지, 303이 큰지 비교해보면 되므로

 

배열의 모든 원소를 문자로 변경하고(mapToObj)

 

두 문자를 합쳤을때의 문자열을 비교하여 내림차순 정렬하고(sorted)

 

하나의 숫자로 합쳤다.

 

그런데 원소가 0, 0, 0인 경우 000이 되어버리므로, 0으로 치환해줘야 한다.

 

문자열이 내림차순이므로, 첫자리가 0이면 그 문자열은 0으로만 구성되었다고 볼 수 있으므로 첫째자리가 0인지 판별해준다.(charAt(0))

 

 

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

class Solution {
    public String solution(int[] numbers) {
        
        String answer = Arrays.stream(numbers)
            .mapToObj(Integer::toString)
            .sorted((a, b) -> (b + a).compareTo(a + b))
            .collect(Collectors.joining(""));
        
        // 11번 케이스. [0, 0]  -> 00 이 아닌 0 이어야 함.
        if (answer.charAt(0) == '0') return "0";
        return answer;
        
    }
}

'코딩테스트 > programmers' 카테고리의 다른 글

소수 찾기  (1) 2023.11.13
다리를 지나는 트럭  (0) 2023.11.09
쿼드압축 후 개수 세기  (0) 2023.11.06
2개 이하로 다른 비트  (0) 2023.11.06
택배상자  (0) 2023.11.06