알고리즘

[프로그래머스] 가장 큰 수(python)

yjenis 2024. 6. 12. 18:28

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 

 

나의 풀이 

def solution(numbers):
    answer = ''
    numbers = list(map(str, numbers))               
    numbers.sort(key = lambda x : x*3,reverse=True)  
    for i in numbers:             
        answer += i
    
    return str(int(answer))

 

 

- 제시된 숫자들중 [0]이 가장 큰 것들을 선별하고, 선별한 숫자들의 길이에 따라 다음에 오는 수를 결정한다.

예를들어 내가 임의로 만든 [3, 30, 34, 5, 9, 92, 901]의 배열이 있다면, [0]이 가장 큰 9, 92, 901을 먼저 선별 한다.

이때, 901은 세자리수이고 92는 두자리수, 9는 한자리수이므로 어떤 수를 택하느냐에 따라 뒤에 오는 숫자의 크기가 달라진다.

만들어야 할 수가 "가장 큰수"이므로 먼저 선별한 [0]가 9인 숫자들을 제외하고 [0]이 가장 큰 수인 5가 와야한다.

 

- 여기서 1차 난관에 봉착하였는데 [9, 92, 901]의 크기를 어떻게 적절히 비교하고 뒤에 5가 올 수 있도록 해야하는지 고민이었다.

 

- 제한사항에서 number의 원소가 0이상 1,000이하라고 주어졌으므로 3번 반복하여 비교하는 방식을 고안하였다.

예를들어 [3, 30, 34, 5, 9, 92, 901] 의 경우

333, 303030, 343434, 555, 999, 929292, 901901901 로 만들고

앞에서부터 3자리수로 만들어 내림차순으로 정렬한다.

 

-  마지막 return 값을 그냥 answer로 하면 안 되는데, 이는 [0, 0] 이 주어진다면 '00'으로 출력되기 때문이다. 

따라서 숫자로 바꾼 뛰 다시하번 문자로 바꾸어준다.