article thumbnail image
Published 2022. 4. 19. 23:04

​- 프로그래머스 / 정렬 / 가장 큰 수 -

 

문제설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고,

이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,

순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

 

제한사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

 

입출력 예

numbers return
[6, 10, 2] "6210"
[3, 30, 34, 5, 9] "9534330"

 

풀이과정

class Solution {
    public String solution(int[] numbers) {
        String answer = "";

        String[] strNumbers = new String[numbers.length];

        for (int i = 0; i < numbers.length; i++) {
            strNumbers[i] = Integer.toString(numbers[i]);
        }

        Arrays.sort(strNumbers, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

        for (String strNumber : strNumbers) {
            answer += strNumber;
        }
        
        if (answer.charAt(0) == '0') return "0";

        return answer;
    }
}

풀이 과정    

    1. int 형인 numbers 배열의 원소들을 String 타입으로 변경하여 strNumbers 배열에 삽입

    2. compareTo 메서드를 사용하여 strNumbers 배열 정렬

    3. 정렬된 strNumbers 배열의 원소를 answer 에 추가

 

https://wana.tistory.com/42

 

[Java] compareTo 메서드

​- Java comparteTo 메서드를 활용한 문자, 숫자 비교 - ​ # 기준값.compareTo(비교값) public int compareTo(Integer anotherInteger) { return compare(this.value, anotherInteger.value); } public static i..

wana.tistory.com

 

회고

public class Practice {
    public static void main(String[] args) {

        String[] arr1 = {"3", "34", "31"};
        Arrays.sort(arr1, Comparator.reverseOrder()); // 결과 : 34, 31, 3

        String[] arr2 = {"3", "34", "31"};
        Arrays.sort(arr2, (o1, o2) -> (o2 + o1).compareTo(o1 + o2)); // 결과 : 34, 3, 31
    }
}
  • 초기에는 위와 같은 단순 String 정렬을 실시하였으나 1번째 자릿수가 같은 수의 경우 뒤에 자릿수까지 비교를 하지 않고 31 > 3 인 이유로 정렬이 34, 31, 3 순으로 정렬됨.
  • compareTo 메서드를 활용하여 두 수의 조합으로 더 큰 수를 만들어 내는 방식을 알 수 있었음.

 

코드 실행 결과

 

 

 

 

- Just Do It -

 

반응형

'CodingTest' 카테고리의 다른 글

[Java] H-index  (0) 2022.04.20
[Java] K번째 수  (0) 2022.04.18
[Java] 베스트 앨범  (0) 2022.04.02
[Java] 전화번호 목록  (0) 2022.04.02
[Java] 완주하지 못한 선수  (0) 2022.04.02
복사했습니다!