0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
입출력
numbers | return |
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
다른사람 풀이
def solution(numbers):
numbers = list(map(str,numbers))
numbers.sort(key = lambda x: x*3 ,reverse = True)
return str(int("".join(numbers)))
결국 풀지 못해서 다른사람 풀이를 봐서 풀었다.
numbers = list(map(str,numbers))
numbers안에 있는 숫자타입 요소를 문자열타입으로 요소로 모두 전환을 한다.
numbers.sort(key = lambda x: x*3 ,reverse = True)
numbers.sort()
리스트안에 있는 내장함수를 사용하여 정렬을 한다.
key = lambda x: x*3
- key = : 정렬을 할 기준을 잡음
- lambda x: x*3 : 아래 코드와 같이 실행되지만 함수를 굳이 선언안하고 실행할 수 있다.
def exam(x):
return x*3
x*3을 안했을시 ["3", "30", "34", "5", "9"]를 정렬하면 ["9", "5", "34", "30", "3"]으로 정렬해서 원하는 리턴이 나오지 않음
x*3을 했을경우 ["999", "555", "343434", "333", "303030"] 으로 정렬이되면서 원하는 리턴값인 ["9", "5", "34", "3", "30"]
으로 정렬되면서 원하는 순서로 리턴된다.
return str(int("".join(numbers)))
"".join() : 리스트안에 있는 문자열 요소를 모두 합친다.
int("".join(numbers)): "0000"의 경우가 생길 수 있으므로 인트값으로 변형한다.
str(int("".join(numbers))): 문자열로 반환하라고 했으니 다시 문자열로 변형시켜준다
'CS > 알고리즘' 카테고리의 다른 글
(알고리즘 공부)기능 개발[파이썬] (0) | 2021.04.19 |
---|---|
(알고리즘 공부)전화번호 목록 (0) | 2021.03.24 |
(알고리즘 공부) 타겟 넘버 (0) | 2021.03.22 |
(알고리즘 공부)다리를 지나는 트럭 (0) | 2021.03.15 |
(알고리즘 공부) 체육복 (0) | 2021.03.15 |