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

kjh1551·2020년 9월 23일
0

알고리즘 풀이

목록 보기
11/14
post-thumbnail

문제

조합할 수 있는 가장 큰 수로 만들기
예: [30, 34, 3, 9] 일 때 답은 934330


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

해설

1. numbers = list(map(str, numbers))
# 실행결과 : ["30", "34", "3", "9"]

int 를 string 으로 변경하게 되면 앞자리부터 정렬할 수 있으므로
변경해준다.

2. numbers.sort(key=lambda x: x*3, reverse=True)
# 실행 결과 : ["9" ,"34", "3", "30"]

일단 람다식을 설명하자면, 각 원소에 3을 곱한다는것이다.
문자열이므로 같은 문자를 3번 반복한다.

이는 구체적으로

  1. 3과 30 사이에서 30 대신 3을 선택해야하기때문
  2. 문제 조건에서 숫자는 1000이하라고 정해져있어서, 자리수를 맞춰주기위해

람다식만 실행시키면 ["303030","333","343434","999"]이다.
앞자리수부터 비교하므로!!!!

그러나 우린 큰 숫자를 만들어야하기때문에 내림차순으로 정렬해준다.
내부적으론 ["999","343434","333","303030"] 가 되어,
결과적으로 ["9","34","3","30"] 이 실행결과가 되겠다.

3. return str(int(''.join(numbers)))
# 실행결과 : "934330"

11번 테스트케이스인 [0,0,0,0] 일 때 "0" 이 나와야한다.
단순히 string으로 join만 하면, "0000" 이 된다.
그러므로 먼저 int 로 바꿔주어서 숫자형식이 되게하고,
문제의 지시대로 string으로 바꿔주면 된다.


배운점

  1. 람다식 사용법
  2. 숫자 정렬시 문자열로 바꾸는 아이디어

0개의 댓글