가장 큰 수(programmers 문제) python 풀이

Jipoleon·2021년 5월 27일
0

programmers

목록 보기
5/9
post-thumbnail

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42746

입력으로 numbers라는 배열이 들어올 때, numbers 배열안에 있는 인덱스값으로 만들 수 있는 가장 큰 수를 리턴하는 것이 목적이다.

내 풀이

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers = [num*3 for num in numbers]
    numbers.sort(reverse=True)
    answer = [num[:int(len(num) / 3)] for num in numbers]
    
    return ''.join(answer)

입력 배열이 [4, 42]이면 리턴은 '4' + '42'로 442가 되어야하고,
입력 배열이 [4, 45]이면 리턴은 '45' + '4'로 454가 되어야한다.
즉, 배열의 인덱스값을 앞에서부터 비교해야 한다.

근데, 어렵게 생각할 필요가 없는 점이 바로 파이썬에서 string의 대소 비교관계는 글자의 앞에서 부터 비교를 하기 때문에 이 문제에 적합하다.

따라서 numbers를 string list로 바꿔준 뒤 글자 수 비교를 위해 각 인덱스값을 3배로 복사해준다. (EX. '6' => '666')

(하필 3을 곱해준 이유는 numbers의 인덱스값은 최대 1000이기 때문이다.)

그 다음 역정렬을 한 뒤, answer에 차례대로 값을 넣어주면 끝난다.

결과

테스트 11이 틀렸다. 그래서 다른 사람의 풀이를 참고해보았다.

다른 사람 풀이

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

나와 비슷한 알고리즘으로 풀었지만, 훨씬 파이썬스럽다. key와 lambda를 이용해 코드가 더욱 간결해졌다.

결과

profile
I Love AI

0개의 댓글