본문 바로가기

Python/프로그래머스

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

문제 풀이

 

def solution(numbers):
    # map을 사용하여 numbers를 str타입으로 고정.
    numbers = list(map(str, numbers))
    
    # 하단 설명 참조
    numbers.sort(key=lambda x: x * 3, reverse=True)
    
    # ['0', '0', '0', '0'] 같이 0으로만 이루어진 배열을 대비하기 위함
    # 이런 배열이 나오게 되면 "0000"으로 반환될 수 있기 때문에
    # 안에서 int타입으로 변환하여 숫자를 뽑은 후 다시 str타입으로 변경하여 리턴한다.
    # ''.join()은 배열내의 각 문자열을 하나로 합쳐주는 내장함수이다.
    return str(int(''.join(numbers)))

 

1. lambda x : x * 3

- numbers의 각 인자를 3번 반복한다는 뜻이다. ex)['6', '10', '2'] >> '666', '101010', '222'

- 제한사항 중 "numbers의 원소는 0 이상 1,000 이하입니다." 라는 문구가 있다. numbers의 값은 1000 이하이므로 3자리 수까지만 맞춰서 비교해도 원하는 답을 찾을 수 있다. 1000자리 이상이면 그만큼 x*n에서 n값을 늘리면 된다.

 

- numbers는 문자열(str) 상태이고, 이 상태에서 비교를 시도하게 되면 ASCII 값으로 치환되어 비교한다.

- 각 문자열의 첫 번째 인덱스부터 비교한다. 당장은 [10, 2, 6]으로 정렬된다. 숫자 자체가 아니라 첫번째 값인 [1, 2, 6] 순으로 정렬되었다고 볼 수 있다.

- 이를 큰 순서대로, 즉 내림차순으로 정렬해야 하기 때문에 reverse=True를 추가한다. 이렇게 하면 [6, 2, 10] 순으로 정렬된다.

 

 

 

문제 링크

 

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

 

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

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

programmers.co.kr