자료구조&알고리즘/프로그래머스

[Python] 가장 큰 수 - 정렬

두잇 두두 2024. 2. 13. 21:25
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

코드

 

def solution(numbers):
    numbers = sorted(map(str, numbers), key=lambda x: x*3, reverse=True)

    return str(int(''.join(numbers)))

 

# 숫자를 문자열로 변환하고 정렬 기준을 설정하여 정렬

# 0인 경우 체크해서 제외 

다른 사람 코드

 

import functools

def comparator(a,b):
    t1 = a+b
    t2 = b+a
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
    answer = str(int(''.join(n)))
    return answer


# functools.cmp_to_key 사용 방법
# 크면 양수 같으면 0 작으면 -1 리턴
import functools

def xy_compare(n1, n2):
    if n1[1] > n2[1]:         # y 좌표가 크면
        return 1
    elif n1[1] == n2[1]:      # y 좌표가 같으면
        if n1[0] > n2[0]:     # x 좌표가 크면
            return 1
        elif n1[0] == n2[0]:  # x 좌표가 같으면
            return 0
        else:                 # x 좌표가 작으면
            return -1
    else:                     # y 좌표가 작으면
        return -1

src = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
result = sorted(src, key=functools.cmp_to_key(xy_compare))

 

 

 

접근법

str로 변환 시 값을 비교 할 때 index[0]부터 차례대로 비교하기 때문에 str로 변환

문제에 1000자리 이하라고 했으므로 *3을 통해서 3자리를 만들어주며 비교

 

 

 

 

배운 점

str은 index[0]부터 아스키코드로 값을 비교한다는 점

functools.cmp_to_key로 sort하는 방법