본문 바로가기
알고리즘 문제/프로그래머스_Lv2 도장깨기

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

by 스코필 2024. 5. 10.

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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

제한 사항

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

 

풀이

numbers 리스트를 문자로 변환하여 정렬을 하면 되는데, 

['3', '30'] 과 같은 리스트는 ['3', '30'] 로 정렬되어, join하게 되면 '330' 이 되어야 하지만, 

조건 없이 정렬하게 되면 ['30', '3'] 로 정렬되어 '303' 처럼 변환이 되어 주어진 문제와 맞지 않은 상황이 발생한다.

  1. numbers 원소는 1000 이하이기 때문에, 길이가 1인 문자 * 3 하게 되면 모든 원소와 비교할 수 있게 된다.
  2. numbers 원소가 [0, 0] 일 경우, 정렬 후 join을 하게 되면 '00' 이 되므로, int형으로 변환한 다음 다시 문자로 변환해주어야한다.

 

✅ Code - 성공

def solution(numbers):
    answer = ''
    numbers = [str(n) for n in numbers]
    numbers.sort(key = lambda x:x*3, reverse = True)
      
    return str(int(''.join(numbers)))