혜온의 이것저것

[코딩테스트 고득점 KIT] 정렬 가장 큰 수 - Python 본문

Algorithm/Programmers

[코딩테스트 고득점 KIT] 정렬 가장 큰 수 - Python

혜온 :) 2021. 9. 28. 15:15

[문제 이해 및 풀이]

[3,30,34,5,9]로 문제의 흐름을 파악했다. 먼저 앞의 수가 큰 수가 와야 하기 때문에 숫자를 문자로 변경해준 뒤 sort(key=lambda:x[0],reverse=True)를 사용해서 정렬을 해주었다. 그 결과 ['9', '5', '3', '30', '34']의 값을 얻을 수 있었다. 이렇게 풀면 3, 30, 34부분에서 문제에서 원하는 정렬이 일어나지 않는다.

한참을 고민하다가 다른 사람들의 풀이를 참고해서 풀었다.

숫자가 모두 1000이하의 수 이기 때문에 문자로 된 값에 *3을 해줘서 비교를 진행했다.

3->333 / 30->303030 / 34->343434 로 변한 세 수를 비교해보면 아스키코드의 경우 앞에서부터 비교가 진행되기 때문에 343434 가 가장 큰 수가 되고 그 다음으로는 333, 303030 순이다.

이렇게만 해서 결과값을 출력하면 테스트11에서 실패하게 된다.

그 이유는 numbers가 [0,0,0,0]인 경우 "0"을 출력해야하는데 "0000"를 출력하기 때문이다. 이를 위해서 answer를 int로 변경해준 뒤 다시 str로 변경해서 return 해주면 문제가 해결된다.


[최종 코드]

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

 

[다음 번에 사용해 볼 것]

더보기
더보기

for문을 사용하는 대신 map과 join을 사용하는 것에 익숙해지자!

for i in range(len(numbers)):
    numbers[i]=str(numbers[i])
#-------------------------------
numbers=list(map(str,numbers)
if numbers[0]=='0':
        return '0'
    else:
        for num in numbers:
            answer+=num
        return answer
#-------------------------------
answer=str(int(''.join(numbers))

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42746

 

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

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

programmers.co.kr

 

Comments