기억은 짧고 기록은 길다
[프로그래머스/Programmers] 가장 큰 수 - Python 본문
Link
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
Solution
해당 문제에서 sorted()의 기준으로 lambda x: x * 3을 사용한 이유는 num의 인수값이 1000이하 이므로 3자리수로 맞춘 뒤 비교하기 위해 사용한 것이다.
문자열의 곱셈이기 때문에 ['111', '2', '6']인 경우 각각 '111111111', '222', '666'으로 연산이 이루어지고 문자열은 ASCII 코드 값으로 비교(첫번째 자리부터 순서대로 비교)가 되기 때문에 내림차순 정렬 시 '666', '222', '111111111'로 정렬이 이루어지게 된다.
마지막에 int로 변환한뒤 다시 str로 변환해주는 이유는 모든 값이 0일 때를 처리해주기 위해 사용한다.
Other Solution의 cmp_to_key()의 경우 첨부한 글을 참고바란다.
def solution(numbers):
numbers = list(map(str, numbers))
numbers = sorted(numbers, key=lambda x: x * 3, reverse=True)
return str(int(''.join(numbers)))
🔑 key point: key=lambda x: x * 3
Other Solution
import functools
def comparator(a,b):
t1 = a + b
t2 = b + a
return (int(t1) > int(t2)) - (int(t1) < int(t2))
def solution(numbers):
n = [str(x) for x in numbers]
n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
return str(int(''.join(n)))
🔑 key point: functools.cmp_to_key()
첨부
https://jeonzzang.tistory.com/48
https://docs.python.org/ko/3/howto/sorting.html
'CodingTest > programmers' 카테고리의 다른 글
[프로그래머스/Programmers] 올바른 괄호 - Python (0) | 2021.09.08 |
---|---|
[프로그래머스/Programmers] 소수 찾기 _2- Python (0) | 2021.09.08 |
[프로그래머스/Programmers] 프린터 - Python (0) | 2021.09.07 |
[프로그래머스/Programmers] 124 나라의 숫자 - Python (0) | 2021.09.06 |
[프로그래머스/Programmers] 크레인 인형뽑기 게임 - Python (0) | 2021.09.05 |
Comments