개발/algorithm

[프로그래머스][level2] 가장 큰 수 -python

zzi_on2 2022. 2. 4. 13:45

문제 링크

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

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

문제 풀이 -다른 블로그 참고 

처음에는 숫자들의 맨 앞 숫자를 key로 두고 각 숫자들을 value로 넣은 뒤

key를 내림차순으로 정렬하고 각 key의 value들을 또 내림차순으로 정렬하여 연결해주려고 하였다. 

하지만 이렇게 풀면 30이 3 보다 앞서기 때문에 [ 3, 30, 34, 5, 9 ] 의 답이 9534303이 된다. 

따라서 문자열 비교로 풀어야 한다. 

int형으로 주어진 numbers를 string 으로 변환 후 

각 문자열을 3번 반복한 값을 기준으로 내림차순 정렬

예를 들어, [ 6, 10, 2 ]의 경우 666, 101010, 222를 문자열 비교하면 6 >2 >1 이므로 정렬결과는 6, 2, 1이 된다.

이를 "".join으로 연결하여  리턴 

int 형으로 바꾸었다가 다시 str으로 변환하는 이유는 모든 값이 0일 때 0이 여러개 연결되므로 하나의 0으로 처리하기 위함이다. 

def solution(numbers):
  numbers = list(map(str,numbers))
  numbers.sort(key = lambda x : x*3, reverse = True)
  
  return str(int("".join(numbers)))