본문 바로가기

programming study/Algorithm

[프로그래머스] 가장 큰 수 - python 풀이

본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다

파이썬 코드

# 가장 큰 수
def solution(numbers):
    # 입력받은 숫자를 문자열화
    str_numbers = list(map(str, numbers))
    # 람다식을 사용하여 정렬
    # 숫자가 문자열화 되어있으므로 한자리씩 해당하는 아스키 코드를 비교
    # 아스키 코드가 큰 순서대로 오름차순으로 정렬 (default)
    # reverse=True를 넣음으로서 내림차순으로 정렬
    str_numbers.sort(key=lambda x: x * 3, reverse=True)
    return str(''.join(str_numbers))

Comment

처음에는 입력 받은 numbers를 이용해서 순열을 만든 뒤, 만들어진 순열에서 가장 큰 값을 구하는 방식으로 풀려고 했다. 테스트 케이스 2개에서는 통과가 되었으나 채점에서는 시간초과 처리가 되었다.

시간 초과 처리를 피하기 위해서는, 입력받은 숫자를 문자열화 한 뒤, 람다식으로 정렬을 해야한다.

숫자가 문자가 되었을 때도 아스키 코드가 각각 존재한다. 주어진 규칙에서, 300보다 33이 더 큰 수를 만들 수 있다. 이 규칙을 람다식에 적용하기 위해서 문자열이 된 숫자를 세 번 반복한다. 그 결과, 300300300, 333333이 만들어 질 것이다. 문자열 비교는 앞에서부터 하나씩 비교하므로 1번째 인덱스에서 333333이 더 크다는 결과가 나온다. 그리고 큰 수를 만들어 주기 위해서 내림차순으로 정렬되도록 reverse=True를 준다.

Reference

프로그래머스