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'과 같이 바꾸기 위해서이다.
반응형
'개발 > Algorithm' 카테고리의 다른 글
[프로그래머스] 파일명 정렬(python) (0) | 2021.09.29 |
---|---|
[프로그래머스] 전화번호 목록(python) (0) | 2021.09.27 |
[프로그래머스] 소수 찾기(python) (0) | 2021.09.23 |
[프로그래머스] 더 맵게(python) (0) | 2021.09.23 |
[리트코드] Kth Largest Element in an Array(python) (0) | 2021.08.30 |