자료구조&알고리즘/프로그래머스
[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하는 방법