티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42746

1. 문제

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

2. 풀이

import java.util.*;
class Solution {
public String solution(int[] numbers) {
        String answer = "";
        // 숫자 입력받고
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < numbers.length; i++) {
            list.add(numbers[i]);
        }
        // Sorting을 하는데, String으로 형변환해서 서로 이어붙인다음에 Integer로 다시 변환해서 서로 비교함.
        // 내림차순으로 Sorting
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                int num1 = Integer.parseInt(Integer.toString(o1) + Integer.toString(o2));
                int num2 = Integer.parseInt(Integer.toString(o2) + Integer.toString(o1));
                if (num1 > num2) {
                    return -1;
                } else if (num1 < num2) {
                    return 1;
                } else {
                    return 0;
                }
            }
        });
        // 0이 입력될수도 있으므로 예외처리해줌
        for (int i = 0; i < list.size(); i++) {
            if (i == 0 && list.get(i) == 0) {
                return "0";
            }
            // 아닌 경우 String으로 변환해서 이어붙이고 반환
            // 생각해보니 StringBuffer를 사용하는게 좋을 듯
            answer+= Integer.toString(list.get(i));
        }
        return answer;
    }
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함