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

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

728x90

[ 문제 풀이 ]

- 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)

- String 배열을 문자열로 바꿔준다.

Arrays.stream( String 배열 ).collect(Collectors.joining())

- 만약 내림차순으로 정렬한 배열의 맨 앞 숫자가 0이라면, "0"을 출력한다.

[ 전체 코드 ]

import java.util.Arrays; import java.util.stream.Collectors; class Solution { public String solution(int[] numbers) { String[] nums = new String[numbers.length]; for (int i = 0; i < numbers.length; i++) nums[i] = numbers[i] + ""; Arrays.sort(nums, (n1, n2) -> (n2 + n1).compareTo(n1 + n2)); return nums[0].equals("0") ? "0" : Arrays.stream(nums).collect(Collectors.joining()); } }

[ 케이스 공유 ]

만약 테스트케이스 11번만 틀리셨다면, 0인 경우를 처리하지 않으셨을 수도 있습니다.

728x90

from http://jisunshine.tistory.com/176 by ccl(A) rewrite - 2021-09-21 00:01:25