프로그래머스_가장큰수_링크참조

Jooni·2020년 10월 21일
0

알고리즘

목록 보기
1/7

가장큰수 프로그래머스링크

문제 설명

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

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

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

제한 사항

numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

numbersreturn
[6, 10, 2]"6210"
[3, 30, 34, 5, 9]"9534330"

파이썬 코드

이 문제 풀다가 풀이를 봤는데.. 미친코드가 있어서 공부를 하다 보니 모르는게 생겨서 블로그로 정리하게 됌.

def solutions(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x * 3, reverse=True)
    return str(int(''.join(numbers)))

key = lambda x:x*2
이 부분은 람다 표현식으로 약식함수라고 볼 수 있다.

def function(x):
    return x*3

과 같다고 볼 수 있다.

문제는 x*3 <- 이 부분인데

ex) 12, 121을 char형으로 바꾼 후 x*3을 한다

12는 121212, 
121은 121121121

이 된다.

sort함수에 의해 121212와 121121121은 한자리씩 아스키 코드를 비교한다.
비교시 같은 아스키 코드라면 다음 문자열을 비교해 오름차순이냐 내림차순이냐에 따라 정렬을 할 수 있다.

12*3비교121*3
1==1
2==2
1==1
2>1
1비교안함2
2비교안함1
비교안함1
비교안함2
비교안함1

결국 '12' >'121'가 된다.

이것을 다른 블로거님한테 질문을 해서 겨우 이해를 했다. ㅎㅎ..

profile
이해가 안돼시거나 질문이 있으신 분들은 댓글로 남겨주세요. 성심성의껏 응하겠습니다!

0개의 댓글