본문 바로가기

개발/Algorithm

[프로그래머스] 가장 큰 수(python)

Programmers, 가장 큰 수

TL;DR

  • 정렬(sort)

문제 요약

1. 주어진 0 또는 양의 정수들을 이어 붙여서 만들 수 있는 수 중 가장 큰 수를 반환한다.

 

- 입력으로 주어진 수들을 순서를 다르게 배치하여 여러 다른 수를 만들 수 있다.

- 만들 수 있는 수 중 가장 큰 수를 문자열 타입으로 반환하면 된다.

입출력 형태

입출력 예시

 

예시 1 :: 6, 10, 2로 만들 수 있는 수 중 가장 큰 수는 6210이다. 따라서 이를 반환하면 된다.

- 6, 10, 2로 만들 수 있는 수는 6102, 6210, 1062, 1026, 2610, 2106 이렇게 6가지를 만들 수 있다. 이 중 가장 큰 수는 6210이기 때문에 6210을 반환하도록 작성하면 된다.

풀이

def solution(numbers):
    
    # 주어진 숫자 중에서 가장 앞 자리 수가 큰 수부터 앞에 오도록 정렬
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x * 3, reverse=True)
    return str(int(''.join(numbers)))

 

가장 큰 수를 만들기 위해서는 주어진 숫자의 앞자리부터 큰 수 순서대로 정렬하면 된다.

- 이를 위해서 우선 숫자가 주어진 변수를 문자열 형태로 변환한다.

- 문자열로 변환한 후 3을 곱한 값을 key로 역순 정렬한다.

  - 3을 곱한 이유는 문제의 제한 조건에 'numbers의 원소는 0 이상 1,000 이하'라는 조건을 피하기 위해서이다.

  - 파이썬에서 문자열 정렬의 경우 아스키 코드의 값을 기반으로 정렬되기 때문에 이처처럼 정렬하였을 경우 주어진 숫자의 앞자리가 큰 수부터 정렬되게 된다.

- 정렬된 리스트를 다시 문자열로 바꾼 뒤, 정수로 변환하고 다시 문자열로 변환한 결과를 반환한다.

  - 이는 '0011'과 같이 표현된 값을 '11'과 같이 바꾸기 위해서이다.

반응형