-
[Camel][Java] 알고리즘 문제해결 - 가장 큰 수Java/알고리즘 2020. 7. 14. 22:05
문제 내용 설명에 앞서 문제는 프로그래머스에서 풀이한 문제임을 알립니다.
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
import java.util.Arrays; class Solution { public String solution(int[] numbers) { String answer = ""; int len = numbers.length; String[] temp = new String[len]; for(int i=0; i<len; i++) { temp[i] = String.valueOf(numbers[i]); } Arrays.sort( temp, (idx1, idx2) -> (idx2+idx1).compareTo(idx1+idx2) ); if ( temp[0].equals("0")) return "0"; StringBuilder sb = new StringBuilder(); for (int i=0; i<len; i++) { sb.append(temp[i]); } answer = sb.toString(); return answer; } }
문제 풀이
위 문제를 해결하기 위해 우선 int형 배열을 String으로 변환했습니다. 그리고 문자열의 순서에 따른 크기 비교를 통해 더 큰 문자열을 선택하는 방식으로 정렬했습니다. 그리고 이 과정에서 람다식이 사용되었는데 람다 식에 대한 설명은 추후 포스팅하도록하겠습니다.
추가적으로 코드 내의 if문은 입력값에 전부 0이 왔을때 0000000과 같은 형태가 아닌 0을 출력되도록 합니다.
'Java > 알고리즘' 카테고리의 다른 글
[Camel][Java] 알고리즘 문제 해결 - 정렬(Sort) / copyOfRange (0) 2020.07.08 [Camel][Java] 배열 중복 요소 카운팅 (HashMap Value 정렬) (1) 2020.07.08