Dandy Now!
  • [레벨2][정렬] 가장 큰 수
    2024년 02월 15일 17시 01분 09초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    1. 문제

    numbers 배열의 요소는 0~1000의 숫자이다. 이 숫자를 이어 붙여 가장 큰 숫자를 만들어야 한다.

    😉 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=python3

     

    2. 풀이

    처음에는 for문과 순열을 이용해 풀이했는데 "시간 초과" 되었다. 고민도 하고 힌트도 찾다가 어썸 한 풀이법을 발견했다.

    # 파이썬 풀이
    
    def solution(numbers):
        # 1. 모든 수를 문자열로 변환
        numbers = list(map(str, numbers))
    
        # 2. x+y와 y+x를 비교하여 정렬
        numbers.sort(key=lambda x: (x * 4)[:4], reverse=True)
        '''
        코드 설명:
        sort 메서드의 키에 람다 함수 결과 값이 반환된다.
        요소가 "3"이라면 "3333"이 되고 "30"이라면 "3030"이 반환된다.
        반환된 키값을 기준으로 내림차순 정렬하면-"3333"이 "3030" 보다 큰 값이므로-"3"이 "30"보다 큰 값으로 정렬된다.
        '''
    
        # 3. 정렬된 numbers를 이어붙인 뒤 반환
        answer = str(int(''.join(numbers)))
        '''
        코드 설명:
        리스트의 모든 요소가 0이라면 0이 반환되어야 한다.
        단순히 문자열을 이어붙이기 하면 요소의 수 만큼 불필요한 0이 붙게 된다.
        "000"을 정수로 변환하면 0이되고, 다시 문자열로 변환한다.
        '''
    
        return answer
    
    print(solution([3, 30, 34, 5, 9])) # "9534330"
    print(solution([0, 0, 0])) # "0"

     

    728x90
    반응형
    댓글