728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42746
코드
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하는 방법
'자료구조&알고리즘 > 프로그래머스' 카테고리의 다른 글
[Python] 최소 직사각형 - 완전탐색 (0) | 2024.02.14 |
---|---|
[Python] H_Index - 정렬 (0) | 2024.02.13 |
[Python] 이중우선순위 큐 - 힙 (0) | 2024.02.12 |
[Python] K번째 수 - 정렬 (0) | 2024.02.12 |
[Python] 디스크 컨트롤러 / 힙 (1) | 2024.02.10 |