[정렬] Leet code 179. Largest Number

su_y2on·2022년 1월 4일
0

알고리즘

목록 보기
2/47
post-thumbnail

리트코드 179
숫자 리스트의 조합 중 가장 큰 수 문자열로 출력하기

풀이1 python

class Solution:
    def cmp(self, x, y):
        if x + y < y + x:
            return 1
        else:
            return -1

    def largestNumber(self, nums: List[int]) -> str:
        nums = [str(num) for num in nums]
        result = ""

        nums = sorted(nums, key=functools.cmp_to_key(self.cmp))
        if nums[0] == "0":
            return "0"

        for num in nums:
            result = result + num

        return result
  • functools의 cmp_to_key함수를 직접 정의해서 비교기준 넣어주기
  • 비교기준 : (a + b) vs (b + a)
  • 예외) 모두 0 일 경우 "00.."이 출력되기 때문에 "0"되도록 걸러주기 -> 정렬 후 가장 첫번째가 0일경우
  • cmp_to_key에 들어갈 함수는 return을 음수,0,양수로 해야한다




풀이2 java

public String solution(int[] numbers) {
        String answer = "";
        String [] snumbers = new String[numbers.length];

        for(int i=0; i<numbers.length; i++){
            snumbers[i] = String.valueOf(numbers[i]);
        }


        Arrays.sort(snumbers, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o2+o1).compareTo(o1+o2); // 내림차순 
            }
        });

        if(snumbers[0].equals("0")) return "0"; // "000" 제거 

        for(String str : snumbers){
            answer += str;
        }
        return answer;
    }
  • sort()의 두번째 인자에 Comparator를 넣어주고 그 안에 compare함수를 재정의해준다. 지금같은 경우 문자열을 비교할 것이기 때문에 Comparator< String >으로 해줬음.
  • compareTo함수 자체가 앞에가 크면 양수 뒤에가 크면 음수를 반환하기 때문에 return에 바로 활용할 수 있었다
  • 오름차순으로 정렬하기위해 o2+o1이 크면 양수를 반환하도록 했습니다

0개의 댓글