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

Jhanoo·2024년 9월 19일

알고리즘 스터디

목록 보기
42/80

[level 2] 가장 큰 수 - 42746

문제 링크

성능 요약

메모리: 405 MB, 시간: 2942.30 ms

구분

코딩테스트 연습 > 정렬

채점결과

정확성: 100.0
합계: 100.0 / 100.0

제출 일자

2024년 09월 19일 22:00:35

문제 설명

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"

※ 공지 - 2021년 10월 20일 테스트케이스가 추가되었습니다.

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges


풀이

  • 숫자 배열을 문자열 배열로 변환 (String의 compareTo() 사용하기 위해서)
  • sort할 때 두 문자열을 앞뒤로 각각 이어 붙여 내림차순 정렬
  • 만약 "00..."처럼 0으로 시작하는 문자열이 나왔다면 "0" 리턴

코드

import java.util.Arrays;

class Solution {
    public String solution(int[] numbers) {
		int n = numbers.length;
		String[] a = new String[n];

		for (int i = 0; i < n; i++) {
			// 숫자를 문자열로 변환
			a[i] = "" + numbers[i];
		}

		Arrays.sort(a, (o1, o2) -> {
			// 두 문자열 이어 붙였을때 비교해서 내림차순 정렬
			return (o2 + o1).compareTo(o1 + o2);
		});

		String answer = "";
		for (int i = 0; i < n; i++) {
			answer += a[i];
		}

		// 만약 숫자가 "000..." 처럼 0으로 시작한다면 "0" 리턴
		if (answer.charAt(0) == '0')
			return "0";

		return answer;
	}
}
profile
어떻게든 해내는 사람

0개의 댓글