프로그래머스 정렬 가장 큰 수 [JAVA] - 22년 8월 20일

Denia·2022년 8월 20일
0

코딩테스트 준비

목록 보기
41/201
post-custom-banner

간단하게 풀려면 간단하게 풀 수 있는 문제를 복잡하게 생각하기 시작하니까 끝도 없이 복잡해졌다. 시간은 시간대로 쓰고 문제도 문제대로 제대로 풀지 못한 것 같다. 많이 아쉬운 문제

내 풀이

package com.company;

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {
        //문자열을 합치기 위해서 StringBuilder 생성
        StringBuilder answer = new StringBuilder();

        //정렬을 위해서 Integer Array 만듬
        Integer[] numbersInt = new Integer[numbers.length];

        //numbers 원소들을 numbersInt 배열로 옮김
        Arrays.setAll(numbersInt , index -> numbers[index]);

        //정렬
        Arrays.sort(numbersInt, new MyComparator());

        //정렬된 값들을 StringBuilder를 통해서 합침
        for (Integer i : numbersInt) {
            answer.append(i);
        }

        //"0000" 이 나온 경우 "0" 으로 return ,앞자리가 0이 아니면 그냥 숫자 return
        return answer.toString().charAt(0) == '0' ? "0" : answer.toString() ;
    }

    class MyComparator implements Comparator<Integer>{
        @Override
        public int compare(Integer a, Integer b) {
            //a , b, 문자열로 만듬
            String aStr = a.toString();
            String bStr = b.toString();

            //둘 중에 길이가 긴 문자열의 길이를 구하고 2를 곱한다 (2를 곱하는 이유 : 비교할 때 사용하기 위해서)
            int maxLength = Math.max(aStr.length(), bStr.length()) * 2;
            //maxLength 길이가 될 수 있도록 문자열을 늘린다.
            while ((aStr.length() < maxLength) || (bStr.length() < maxLength)) {
                aStr += aStr;
                bStr += bStr;
            }
            char[] aChars = aStr.toCharArray();
            char[] bChars = bStr.toCharArray();

            //maxLength 길이만큼 for문을 돌면서 문자열의 각 숫자들을 비교한다.
            for (int i = 0; i < maxLength; i++) {
                if(aChars[i] > bChars[i]) return -1;
                else if(aChars[i] < bChars[i])return 1;
            }

            return 0;
        }
    }
}

답안 참고한 풀이

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

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]);
        }
        Collections.sort(list, (a, b) -> {
            String as = String.valueOf(a), bs = String.valueOf(b);
            return -Integer.compare(Integer.parseInt(as + bs), Integer.parseInt(bs + as));
        });
        StringBuilder sb = new StringBuilder();
        for(Integer i : list) {
            sb.append(i);
        }
        answer = sb.toString();
        if(answer.charAt(0) == '0') {
            return "0";
        }else {
            return answer;
        }
    }
}

profile
HW -> FW -> Web
post-custom-banner

0개의 댓글