본문 바로가기

알고리즘/Lv. 2

프로그래머스 42746 가장 큰 수 파이썬 풀이

728x90

난이도 : Lv. 2

풀이일 : 2412161

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


아이디어

  • 숫자들을 문자로 변환 후 정렬한다.
  • 30, 3 숫자들의 정렬을 위해 x * 5 값을 기준으로 정렬한다.
  • 마지막에 붙인 문자열을 숫자로 변환했다가 다시 문자로 변환하여 반환한다.

풀이 코드

def solution(numbers):
    answer = list(map(str, numbers))
    answer.sort(key=lambda x : x * 5, reverse=True)
    
    return str(int(''.join(map(str, answer))))
  • answer : numbers 리스트에 있는 숫자들을 문자로 변환하여 저장
  • answer.sort() : answer에 담긴 문자열들을 *5 한 값 기준으로 내림차순 정렬
  • 정렬된 문자열을 붙여 숫자로 변환 후 다시 문자열로 변환하여 반환

채점 화면


반례

입력 출력
[0, 0, 0, 0] "0"

느낀점

  • 처음에는 * 2를 기준으로 했는데 틀려서 숫자를 확 올렸다. 긴 숫자들의 비교 때문에 2 곱해서는 해결 안되는 테스트 케이스 들이 있는 것으로 추정된다.
  • 숫자를 올리고도 틀린 문제가 하나 있어서 고민하다가 반래를 찾았다. 숫자를 문자열로 반환해야 하니까 리턴 시 문자열을 숫자로 한 번 변환했다가 다시 문자로 변환해서 리턴했더니 해결되었다.