- 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수
- 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210
- 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return
def solution(numbers):
N = len(numbers)
str_list = [str(i) for i in numbers]
str_list.sort(reverse=True)
for i, s in enumerate(str_list):
if i == N-1:
break
if str_list[i+1] in s and len(str_list[i+1])<len(s):
if int(s[len(str_list[i+1]):][0]) < int(str_list[i+1][0]):
str_list[i], str_list[i+1] = str_list[i+1], str_list[i]
return ''.join(str_list)
런타임 에러가 발생했다. 추측하기로는 str_list[i], str_list[i+1] = str_list[i+1], str_list[i] 해당 문법의 시간복잡도가 문제라고 생각이 들었다.
from collections import deque
def solution(numbers):
numbers.sort()
str_list = [str(i) for i in numbers]
match_digits = []
for s in str_list:
if len(s) == 1:
match_digits.append((s+"000", s))
elif len(s) == 2:
match_digits.append((s+"00", s))
elif len(s) == 3:
match_digits.append((s+"0", s))
m = sorted(match_digits, key=lambda x :x[0], reverse=True)
return ''.join([i[1] for i in m])
import functools
def cmpare(a, b):
t1 = str(a) + str(b)
t2 = str(b) + str(a)
return (int(t1) > int(t2)) - (int(t1) < int(t2))
def solution(number):
sorted_num = sorted(number, key = functools.cmp_to_key(lambda a, b : compare(a,b)), reverse=True)
answer = ''.join(str(x) for x in sorted_num)
return '0' if in(answer) == 0 else answer
def solution(N, num_list):
str_list = [str(i) for i in num_list].sort()
for i in range(0, N):
if str_list[i+1] in str_list[i]:
if int(str_list[i][len(str_list[i])-1:][0])>int(str_list[i+1][0]):
str_list[i], str_list[i+1] = str_list[i+1], str_list[i]
return int(''.join(str_list))