[프로그래머스] 가장 큰 수

nayoon·2021년 11월 29일
0

가장 큰 수

잘못된 풀이..

import java.util.*;

class Solution {
    // 앞자리가 가장 큰 수가 앞으로 오도록 정렬
    public String solution(int[] numbers) {
	ArrayList<String> arr = new ArrayList<>();
        for(int n: numbers)
            arr.add(Integer.toString(n));
        
        Collections.sort(arr, new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                for(int i = 0; i < 3; i++) {
                    if (o1.charAt(i) == o2.charAt(i)) {
                        if (o1.length() == i + 1) {
                            if (o2.length() == i + 1) {
                                return 0; // 같은 숫자이면서, 자릿수가 같은 경우
                            } else {
                                for(int t = i + 1; t < o2.length(); t++) {
                                    if (o2.charAt(t) > o1.charAt(i))
                            		    return 1;
                                    else if (o2.charAt(t) < o1.charAt(i))
                            		    return -1; // o1이 더 크다..!
                                }
                                return 0;
                            }
                        } else if (o2.length() == i + 1) {
                            for(int t = i + 1; t < o1.length(); t++) {
                                if (o1.charAt(t) > o2.charAt(i))
                            		return -1;
                                else if (o1.charAt(t) < o2.charAt(i))
                            		return 1; // o1이 더 크다..!
                            }
                            return 0;
                        }
                    } else 
                    	return o2.compareTo(o1);
                }
                return o2.compareTo(o1);
            }
        });
        
        return String.join("", arr);
    }
}

자릿수마다 비교하는 식으로 했다.

백 단위 수와 일 단위 수는 다음과 같이 했다.

예)
334 3

  1. 0번째 인덱스가 가리키는 값은 각각 3이다.
  2. 두번째 수는 1의 자리 수 이기 때문에 첫번째 수만 진행한다.
  3. 1번째 인덱스가 3이기 때문에 연산을 계속한다.
  4. 2번째 인덱스가 4이기 때문에 첫번째의 0번째 인덱스보다 크다.
    -> 따라서 334가 3보다 앞에 위치한다.

라고 풀었는데..!

엄청나게 간단하면서도 똑똑한 풀이를 봐버렸다..

import java.util.*;

class Solution {
    // 앞자리가 가장 큰 수가 앞으로 오도록 정렬
    public String solution(int[] numbers) {
        ArrayList<String> arr = new ArrayList<>();
        for(int n: numbers)
            arr.add(Integer.toString(n));
        
        Collections.sort(arr, (a, b) -> (b + a).compareTo(a + b));
        
        if (arr.get(0).startsWith("0")) return "0";
        
        return String.join("", arr);
    }
}

0에 대해 처리하고, 람다식까지 이용해서 앞 + 뒤, 뒤 + 앞 으로 연산해본 결과 중 큰 값을 return하도록 했다.

profile
뚜벅뚜벅 열심히 공부하는 개발자

0개의 댓글