문제 링크
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)))
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스] [level2] 큰 수 만들기 -python (0) | 2022.02.04 |
---|---|
[프로그래머스][level2] 주차요금 계산 -python (0) | 2022.02.04 |
[백준 3986번] 좋은 단어 -python (0) | 2022.02.04 |
[백준 4949번] 균형잡힌 세상 -python (0) | 2022.02.04 |
[백준 1874번] 스택 수열 - python (0) | 2022.02.04 |