Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

IT could be

미완,, 프로그래머스 - 가장 큰 수 [JAVA] 본문

알고리즘

미완,, 프로그래머스 - 가장 큰 수 [JAVA]

얘진 2022. 12. 16. 01:11

 

언어는 자바 ! 

 

# Issue 

package org.example.sort;

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

public class MakeMaxNum {
    public String solution(int[] numbers) {
        String answer = "";

        List<String> list = new ArrayList<>();
        
        for (int i = 0; i < numbers.length; i++) {
            list.add(Integer.toString(numbers[i]));
        }

        for (int i = 0; i < list.size()-1; i++) {
            for (int j = i + 1; j < list.size(); j++) {
                String one = list.get(i);
                String two = list.get(j);

                int idx = Math.min(one.length(), two.length());
                for (int k = 0; k < idx; k++) {
                    if ((int)one.charAt(k) < (int)two.charAt(k)) {
                        list.remove(i);
                        list.add(i, two);
                        list.remove(j);
                        list.add(j, one);
                    }
                }

            }
        }

        for (int i = 0; i < list.size(); i++) {
            answer += list.get(i);
        }
        return answer;
    }

    public static void main(String[] args) {
        MakeMaxNum makeMaxNum = new MakeMaxNum();
        int[] arr = {3, 30, 34, 5, 9};
        System.out.println(makeMaxNum.solution(arr)); // 9534330
    }
}

 

다른 생각이 너무 안나서 공부하려고 ,, 다른 코드들을 참고해봤다

 

수를 순서대로 더해가면서 더 큰 경우로 sort하는 풀이방법을 확인했다.

그래서 원래있던 코드에다가 수정을 해봤다.

 

# Issue

package org.example.sort;

public class MakeMaxNum {
    public String solution(int[] numbers) {
        String answer = "";

        String[] list = new String[numbers.length];

        String one;
        String two;
        for (int i = 0; i < list.length - 1; i++) {
            for (int j = i + 1; j < list.length; j++) {
                one = Integer.toString(numbers[i]);
                two = Integer.toString(numbers[j]);
                int tmp;

                if (Integer.parseInt(one + two) < Integer.parseInt(two + one)) {
                    tmp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = tmp;
                }


            }
        }
        if (numbers[0] == 0) {
            return "0";
        }

        for (int i = 0; i < numbers.length; i++) {
            answer += Integer.toString(numbers[i]);
        }
        return answer;
    }

    public static void main(String[] args) {
        MakeMaxNum makeMaxNum = new MakeMaxNum();
        int[] arr = {3, 30, 34, 5, 9};
        System.out.println(makeMaxNum.solution(arr)); // 9534330
    }
}

String으로 바꾼 numbers에 있는 비교하는 두 값을 

순서를 달리해서 더 큰 수가 되도록 정렬을 하는 방법인데 

예를 들어서 "5" 와 "9"가 있을 때

"59" 와 "95" 를 비교해서  "95"가 더 크니까 자리가 바뀌도록 하는 로직이다. 

그리고 추가로 "000" 같은 경우는 "0" 이니까 

이 예외처리 코드도 추가해 주었다, 

하지만,, ,,여전히 시간 초과가 난다.. 

 

# Issue

package org.example.sort;

public class MakeMaxNum {
    public String solution(int[] numbers) {
        String answer = "";

        String[] list = new String[numbers.length];

        for (int i = 0; i < numbers.length; i++) {
            list[i] = Integer.toString(numbers[i]);
        }

        for (int i = 0; i < list.length - 1; i++) {
            for (int j = i + 1; j < list.length; j++) {
                String tmp;
                if ((list[i]+list[j]).compareTo(list[j]+list[i]) < 0) {
                    tmp = list[i];
                    list[i] = list[j];
                    list[j] = tmp;
                }
            }
        }
        if (list[0].compareTo("0") == 0) {
            return "0";
        }

        for (int i = 0; i < numbers.length; i++) {
            answer += list[i];
        }
        return answer;
    }

    public static void main(String[] args) {
        MakeMaxNum makeMaxNum = new MakeMaxNum();
        int[] arr = {3, 30, 34, 5, 9};
        System.out.println(makeMaxNum.solution(arr)); // 9534330
    }
}

숫자 비교와 문자열 비교에 사용되는 

compareTo() 를 사용해봤다

 

숫자의 경우 

크다 (1)

같다 (0)

작다 (-1)

 

문자열의 경우

같다 (0)

문자열 차이 ( 음수에서 ~ 양수까지 )

 

.. 흠 

하지만 계속해서 시간초과가 나는데,, ,, 

 

Comming Soon,, 

계속 풀고 있는 즁임 ,, 

 

Comments