티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3#

 

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

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

programmers.co.kr

1
2
3
4
def solution(numbers):
    arr = list(map(str, numbers))
    answer = ''.join(sorted(arr, key = lambda x: x * 5, reverse = True))
    return str(int(answer))
cs

정렬 문제다.

문자열의 경우 앞자리부터 비교가 가능하기에, 문자열로 변경 후 비교했다.

하지만 주의할 점이 두 가지 있다.

1. 30, 3의 경우에 정렬하면 [30, 3] 순으로 정렬된다(역순으로 정렬시). 따라서 numbers의 원소 최대 크기인 1000에 맞추기 위해 모두 5번씩 붙여나가면서 비교한다. (e.g. 3030303030, 33333)

2. numbers가 [0, 0, 0, 0]과 같이 0으로만 이루어져있으면 "0000"이 반환된다. 따라서 정수로 변환하고 다시 문자열로 변환하고 리턴해줘야 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함