개발/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)))