Algorithm/1일 1코테

[💕 프로그래머스] 가장 큰 수

대인보우 2020. 12. 18. 21:43
반응형

Q. 가장 큰 수

programmers.co.kr/learn/courses/30/lessons/42746#

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

A.

def solution(n):
    n.sort(key= lambda x: (str(x)*6)[:6], reverse=True)
    n = map(str, n)
    return str(int(''.join(n)))

n안에 들어있는 각 요소를 6번씩 곱해준뒤 [:6]으로 출력해 갯수를 맞춰준다.

그리고 이걸 key로 삼아 정렬해주면 큰 순서대로 정렬이 됨!

 

ex) 30과 34, 3이 있을때

303030, 343434, 333333이므로 34, 3, 30으로 정렬됨.

 

join해서 출력하는데 int로 한번 바꿔준 이유는 '00000'일시 '0'으로 출력하게 하기 위해서다.

 

다른사람 풀이

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

해당 풀이를 이용하면

666, 999, 101010일때, 10, 9, 6순으로 정렬되지 않나 생각했는데

 

문자열 비교연산의 경우엔 첫번째 인덱스인 666[0]인 6과 101010[0]인 1과 222[0]인 2를 ascii숫자로 바꿔서 비교합니다. 물론 같으면, 다음 인덱스도 비교합니다. 비교한 결과 [6, 2, 10]의 순으로 정렬됩니다. [박상희님 댓글]

 

그렇군...!

반응형