ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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을 출력되도록 합니다. 

     

    댓글

Camel`s Tistory.