https://programmers.co.kr/learn/courses/30/lessons/42746
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
- 입력을 문자열로 받아서 리스트로 변경한다.
- lambda를 이용하여 정렬하고 sum으로 합친다.
- join을 이용하여 이어서 출력한다.
def solution(numbers): for i in range(len(numbers)): numbers[i] = list(str(numbers[i])) numbers.sort(reverse = True, key = lambda x : (x[0])) numbers = sum(numbers, []) return ''.join(numbers)
def solution(numbers): max_len = 0 for i in range(len(numbers)): numbers[i] = list(str(numbers[i])) if max_len < len(numbers[i]): max_len = len(numbers[i]) for i in range(len(numbers)): num = max_len - len(numbers[i]) if num != 0: for j in range(num): numbers[i].append(numbers[i][-1]) if j == num - 1: numbers[i].append('+') numbers[i].append(str(num)) numbers.sort(reverse = True) for i in range(len(numbers)): if '+' in numbers[i]: del_num = int(numbers[i][-1]) numbers[i] = numbers[i][:len(numbers[i])-2-del_num] numbers = sum(numbers, []) return ''.join(numbers)
✅lambda x: x*3
을 하는 이유는 1000이하의 숫자 이므로 3번 반복하여 비교하기 위함이다.
✅ex) 위의 예시처럼 3, 30, 34이면 333, 303030, 343434 이렇게 되고 앞부터 비교를 하면 34, 30, 3이 아닌 34, 3, 30순으로 정렬된다
def solution(numbers): numbers = list(map(str, numbers)) numbers.sort(key=lambda x: x*3, reverse=True) return str(int(''.join(numbers)))
출처 : 프로그래머스 다른사람의 풀이