본문 바로가기
파이썬알고리즘

20210702#(55) 프로그래머스 가장 큰 수 (정렬)

by zho 2021. 7. 2.

https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

풀다가 답이 안나와서 구글링을 통해 제출했다...

def solution(numbers):
    numbers=list(map(str,numbers))
    numbers.sort(key=lambda x:x*3,reverse=True)
    return str(int(''.join(numbers)))

 

1. list(map(str, numbers))를 통해 string으로 바꾸고 list로 변환해준다.

 

2. numbers,sort(key=lambda x:x*3, reverse=True)

    2.1 함수 중 하나인 lambda는 lambda 인자: 표현식 으로 구성되어있다. (ex a=1,b=2 a+b함수 -> (lambda a,b:a+b)(1,2)

   

2.2 key=sotr조건 (정렬을 목적으로 하는 함수를 값으로 넣는다. lambda를 이용할 수 있다. key 값을 기준으로 정렬되고 기본값       은    오름차순이다.) 

   

2.3 x*3은 numbers 값이 1000이하이므로 3자리로 맞춰주는 것(ex 6,10,2 -> 666,101010,222)

 

2.4 문자열 비교는 ASCII 값으로 치환되어 정렬되기에 6>2>1순으로 큼

   

2.5 reverse=True를 해줌으로써 내림차순으로 정렬 됨(6,2,10)

 

3. return str(int(''.join(num))) 문자열 합쳐주기

    3.1 int변환하고 str변환하는 이유는 모든 값이 0일때를 처리하기 위해서..(ex '0000')

 

참고자료 : https://wooaoe.tistory.com/82

wooaoe님 tistory 블로그

 

[Python] 프로그래머스 가장 큰수 파이썬 코드

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중

wooaoe.tistory.com

728x90