본문 바로가기
알고리즘/[프로그래머스] JAVA

[프로그래머스] 정렬 > 가장 큰 수

by 코딩맛집 2024. 3. 21.

문제 :

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

 

프로그래머스

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

programmers.co.kr

 

해결 :

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String[] answer = new String[numbers.length];
        
        for(int i =0; i<answer.length; i++){
            answer[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(answer, (o1,o2)->(o2+o1).compareTo(o1+o2));
        
        if(answer[0].equals("0")){
            return "0";
        }
        
        return String.join("",answer);
    }
}

 

 

풀이 :

- int형 배열을 String형으로 바꿔주어 숫자 자체가 아닌 앞자리의 크기로 비교한다.

 

- 문자열을 내림차순으로 정렬한다.

그냥 n2.compareTo(n1)만을 하면 다음과 같다.
[ 9, 5, 34, 30, 3 ]

여기엔 문제가 존재한다.
비록 숫자가 작지만 먼저 오는게 더 큰 경우가 생길 수도 있다.
[ 34, 30, 3 ] 이 경우, [ 34, 3, 30 ]이 되어야 한다는 것이다.
34303 < 34330이기 때문이다.

그렇기 때문에 단순 비교가 아니라
n1에 n2를 더한 것 n2에 n1를 더한 것을 비교하여 내림차순 정렬해주어야 한다.
(n2 + n1).compareTo(n1 + n2)

 

※ 참조

https://jisunshine.tistory.com/176

 

[level2] 프로그래머스 - 가장 큰 수(JAVA)

[ 문제 풀이 ] - int형 배열을 String형으로 바꿔주어 숫자 자체가 아닌 앞자리의 크기로 비교한다. - 문자열을 내림차순으로 정렬한다. 그냥 n2.compareTo(n1)만을 하면 다음과 같다. [ 9, 5, 34, 30, 3 ] 여기

jisunshine.tistory.com

https://velog.io/@skwx50000/java-Arrays.sort%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

java Arrays.sort()에 대해서 알아보자

"처음 접했을때 나의 모습...😨" Arrays.sort()란? 우리는 보통 자바에서 배열 정렬을 할때 java.util.Arrays 클래스의 sort()메소드를 이용하여 정렬을 한다. 이러한 Arrays.sort를 이용하여 우리는 아래와 같

velog.io