프로그래머스/Lv.2
[프로그래머스/ Python] 가장 큰 수
KimNang
2023. 3. 6. 10:21
문제 정보
제목 : 가장 큰 수
난이도 : Lv.2
사용 언어 : Python
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42746
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
나의 풀이
list에 num을 문자열로 변환하여 *3을 한 문자열과, num을 문자열로 변환했을 때의 길이를 저장합니다. *3을 하는 것은 0이상 1,000이하라는 원소의 자리수를 맞추기 위해서입니다. 이후 list를 순차적으로 접근하는 for루프를 이용하여 sum에는 n의 값을 int로 변환한 값을 저장합니다. 여기서 sum이 0이라면 answer에는 '0'을 저장하고 break합니다. 0이 아니라면 answer에 n을l의 길이까지 슬라이싱한 값을 저장합니다. 반복이 끝나면 answer을 리턴합니다.
코드
def solution(numbers):
answer = ''
list = [((str(num)*3),len(str(num))) for num in numbers]
list.sort(reverse=True)
sum = 0
for n,l in list :
sum += int(n[:l])
if ( sum == 0):
answer = '0'
break
else :
answer += n[:l]
return answer