코딩테스트/프로그래머스

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

박소민 2022. 2. 3. 16:28
문제: 가장 큰 수
 

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

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

programmers.co.kr

 

  • 내 풀이 (오답)
    def solution(numbers):
        answer = ''
        #첫번째 수 값으로 오름차순 정렬
        numbers=sorted(numbers,key=lambda num:str(num)[0],reverse=True)
            
        for num in numbers:
            answer=answer+str(num)
        
        return answer​

→ 첫 번째 예시에만 적용되는 코드

첫번째 수가 동일한 수가 여러 개 일 때 더 큰 수를 만들도록 정렬하고 싶었지만 알아내지 못함

 

  • 다른 사람 풀이
def solution(numbers):
    #사전 값으로 정렬
    numbers_str=[str(num) for num in numbers]
    #number는 1000이하의 숫자이므로 x3(반복)한 값으로 비교
    numbers_str.sort(key=lambda num: num*3, reverse=True)
    
    return str(int(''.join(numbers_str)))
    #만약 numbers=[0,0,0,0]이면 0으로 나와야 하므로 int 처리
    #join한 값을 int로 만들어 준 후 요구하는 return 값인 str로 변환

중요 포인트

  • str로 형 변환하여 사전 값으로 배열 생성
  • str로 변경한 숫자에 3을 곱한 값(반복)으로 재정렬

    → 람다식 이용해서 정렬 조건에서 3을 곱한 것: 배열 내 원래 값은 변하지 X

        [999, 555, 343434, 303030, 333] 값으로 생각하고 정렬 → [999, 555, 343434, 333, 303030]

  • 반환 해줄 때, int로 변환 해준 후 다시 str로 변경