memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
본 문제의 저작권은 프로그래머스(https://programmers.co.kr/)에 있습니다.

 

문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

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

 

Coding - Python3

처음에는 뒤에 0을 붙여서 모두 같은 자릿수를 만든다음 크기를 비교하면 된다고 생각했다.

 

하지만, 반례가 존재한다. [12, 121] 를 보면 "12121" 이 답이어야 한다.

0을 붙이는 방법을 사용하면 [120, 121] 이고, "12112" 가 답이 된다.

 

그래서 (구글 검색의 도움으로) 같은 수를 이어 붙이는 방법을 사용했다.

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

[12, 121][121212, 121121121] 를 문자열 비교를 하게 되면,

4번째 원소에서 121212가 121121121 보다 아스키코드가 더 크기 때문에 "12121" 이 된다.

 

위 코드를 설명을 위해 풀어쓰면

def solution(numbers):
    str_numbers = map(str, numbers)  # 각 원소를 문자열로 변환
    sorted_numbers = sorted(
        str_numbers,
        key=lambda x: x * 3,  # 각 원소에 3을 곱한다. (문자열 곱셈)
        reverse=True)  # 내림차순 정렬
    return str(int("".join(sorted_numbers)))

 

Reference

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!