CoTe/[programmers]1

가장 큰 수(str_num.sort(key=lambda x:x*3)) 정렬 문제

TheSole 2023. 10. 31. 00:29

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

 

프로그래머스

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

programmers.co.kr

핵심

더보기

우선 간단하게 numbers를 앞자리가 큰 수가 오도록 하여 정렬해야겠다는 생각이 든다.
int 상태로 정렬을 하게 되면 10이 6보다 크게 되지만, 우리가 원하는 것은 6이 10보다 앞에 오는 것이다.
따라서 numbers의 각 원소들을 str()메서드를 통해 문자열로 바꿔 정렬해야한다.
그렇게 되면 앞자리부터 비교하기 때문에 6, 2, 10 순으로 정렬이 된다.

문제는 두번째 예제의 3과 30이다.
우리는 9, 5, 34, 3, 30 순으로 정렬되길 바라지만, 위와 같은 방식으로 정렬을 시도하게 되면 9, 5, 34, 30, 3으로 정렬이 된다.
그래서 우리는 3과 30을 비교하기 위해 각 수를 3번씩 곱해서 처리해줄 것이다.
문제의 조건 중, numbers의 원소는 0이상 1000이하라는 문구가 있기 때문에 가능한 비교이다,
모든 원소를 3번씩 곱해서, 그 값을 정렬의 기준으로 사용하는 것이다.
이를 가능케하는 것이 파이썬의 정렬 key이다.

 

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항
  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
 
def solution(numbers):
    str_num = list(map(str, numbers))
    str_num.sort(key=lambda x:x*3, reverse=True)
    
  
    return str(int(''.join(str_num)))

ref

https://gorokke.tistory.com/38

 

람다(lambda) 총 정리, key sort, key 정렬

1. 람다(lambda) 1 ) 의미 익명함수를 지칭하는 용어 즉, 기존의 함수(명 등)을 선언하고 사용하던 방식과는 달리 바로 정의하여 사용할 수 있는 함수. 2 ) 형식 : lambda 인자 : 표현식 예시) sum = lambda x:

gorokke.tistory.com

https://velog.io/@zunzero/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%88%98-%EC%A0%95%EB%A0%AC-key-lambda

 

[프로그래머스] 가장 큰 수 - 정렬 key, lambda

https://school.programmers.co.kr/learn/courses/30/lessons/42746 아이디어를 떠올리는 데에는 큰 시간이 걸리진 않았지만, 코드로 구현하는 데 있어 시간을 많이 잡아먹은 문제이다. 우선 간단하게 numbers를 앞자

velog.io