-
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인 경우를 처리하지 않으셨을 수도 있습니다.
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[level1] 프로그래머스 - 최소직사각형(JAVA) (0) 2021.10.10 [level2] 프로그래머스 - 게임 맵 최단거리(JAVA) (0) 2021.09.29 [level2] 프로그래머스 - 빛의 경로 사이클(JAVA) (2) 2021.09.20 [level2] 프로그래머스 - 행렬 테두리 회전하기(JAVA) (0) 2021.09.19 [level2] 프로그래머스 - 짝지어 제거하기(JAVA) (0) 2021.09.18 댓글