CS/알고리즘

(알고리즘 공부)가장 큰 수

ri5 2021. 3. 23. 21:45

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))): 문자열로 반환하라고 했으니 다시 문자열로 변형시켜준다