https://school.programmers.co.kr/learn/courses/30/lessons/42746
"""
입출력 예시)
numbers = [6, 10, 2] -> "6210"
numbers = [3, 30, 34, 5, 9] -> "9534330"
"""
from itertools import permutations
def solution(numbers):
permu = list(map(''.join, permutations(map(str, numbers)))) # permutations 쓸 때 숫자의 경우, map(str, 리스트)가 추가로 들어가야 함
answer = max(permu)
return answer
-> '너무 간단하게 풀리는 문제 아닌가...?!' 라며 자신있게 제출했지만 추가된 테스트 케이스들에서 시간 초과로 틀림...
def solution(numbers):
numbers = list(map(str,numbers)) # int를 str으로 변환
numbers.sort(key = lambda x : x*3, reverse=True) # str으로 변환된 숫자들을 3번 반복한 값을 기준으로 내림차순 정렬
return str(int(''.join(numbers)))
-> sort(key= ) 이용
- list.sort()
- 원본 리스트 자체를 정렬
- sort()한 리스트를 다른 객체로 선언하면 None을 반환
- -> sort()한 후, 원본 리스트 자체를 불러와야 정렬된 리스트가 반환됨
- key 매개 변수를 가짐
# 원본 리스트 불러오기
a = [5, 2, 3, 1, 4]
a.sort()
a
# -> [1, 2, 3, 4, 5]
# 다른 객체로 선언 후 불러오기
a = [5, 2, 3, 1, 4]
b = a.sort()
print(b)
# -> None
- lambda x : x*3의 의미
- x가 int일 때 -> x에 3을 곱함
- x가 str일 때 -> x를 3번 반복 (ex. 'xxx')
# x가 int일 때 -> x에 3을 곱함
# list(range(5)) -> [0, 1, 2, 3, 4]
list(map(lambda x : x*3, range(5)))
# -> [0, 3, 6, 9, 12]
# x가 str일 때 -> x를 3번 반복
a = ['a', 'bc', 'def', 'g', 'hi', 'jkl', 'mnop']
list(map(lambda x : x*3, a))
# -> ['aaa', 'bcbcbc', 'defdefdef', 'ggg', 'hihihi', 'jkljkljkl', 'mnopmnopmnop']
- x*3을 한 이유
- '333'과 '303030' 중 문자열 정렬이기 때문에 '333'을 크다고 판단해야하기 때문
- 3보다 30을 더 큰 수라고 판단하면 결과가 '9534330'이 아닌 '9534303'이 되어버림
# str의 오름차순과 내림차순 비교
n_str = ['3', '30']
n_str_lam = list(map(lambda x : x*3, n_str)) # -> ['333', '303030']
# reverse=False (오름차순)
sorted(n_str_lam)
# -> ['303030', '333']
# reverse=True (내림차순)
sorted(n_str_lam, reverse=True)
# -> ['333', '303030']
참고)
https://velog.io/@falling_star3/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Level2-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%88%98