[프로그래머스] 정렬 | 가장 큰 수 | Level 2 | 파이썬(Python)

letthem·2025년 1월 14일

CodingTest

목록 보기
10/24
post-thumbnail

문제

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항

numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

numbersreturn
[6, 10, 2]"6210"
[3, 30, 34, 5, 9]"9534330"

풀이

그냥 string으로 변환하고 내림차순으로 sort하면 될 것 같았는데 아니었다 ...

string 변환 ⬇️
numbers = list(map(str, numbers))

내림차순 sort ⬇️
numbers.sort(reverse = True)

=> 3, 30, 34를 34, 3, 30 으로 해야하는데 이렇게 하니까 34, 30, 3 이 되었다.

다른 사람의 풀이를 참고해보았다.

numbers.sort(key = lambda x : x * 3, reverse = True)

Q. 왜 3번을 반복할까?
A. 주어진 숫자들이 최대 1000까지 주어질 수 있기 때문에 3번 반복하는 것 !

  1. string을 3번 반복
    => 343434, 303030, 333
  2. 정렬을 위해 모든 숫자가 같은 길이로 맞춰진다.
    => 343, 303, 333
  3. 내림차순 정렬
    => 343, 333, 303
  4. 정렬된 numbers
    => 34, 3, 30

print(numbers)해보면 다음과 같이 나오고 ⬇️

['9', '5', '34', '3', '30']

문자열이므로 +로 합치면 된다 ⬇️

for i in numbers:
    answer += i # string이므로 answer에 더해주기

최종 코드

def solution(numbers):
    answer = ''
    
    numbers = list(map(str, numbers)) # string으로 바꾸기
    numbers.sort(key = lambda x : x * 3, reverse = True) # lambda(기준) - 3번씩 반복한 ver에서, reverse = True - 내림차순 정렬
    # ex) 3, 30, 34 -> 333, 303030, 343434 -> 343, 333, 303 -> 34, 3, 30
    
    for i in numbers:
        answer += i # string이므로 answer에 더해주기
    
    return str(int(answer)) # 00의 경우 -> 0으로

0개의 댓글