본문 바로가기

Algorithm/programmers(python)

[programmers] 가장 큰 수, 42746

반응형

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

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

더보기

제한사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

입출력 예
입출력 예

풀이

아이디어 : 정렬

풀이 1 :  테스트 2 실패

def solution(numbers):
    answer = ''
    numbers = sorted(map(str,numbers), key=lambda x:x[0], reverse=True)
    for i in numbers:
        answer += "".join(i)
    print(answer)
    return answer

풀이 설명

1. numbers => str로 변경, 첫째자리 수 기준 내림차순 정렬
2. 문자 이어붙이기

풀이 2 : 성공

def solution(numbers):
    answer = ''
    #1,2
    numbers = sorted(map(str,numbers), key=lambda x:x*4, reverse=True)
    #3.
    for i in numbers:
        answer += "".join(i)
    #4.
    return str(int(answer))

 

풀이 설명

1. numbers => str로 변경, 첫째자리 수 기준 내림차순 정렬
2. numbers의 원소 : 0~1000. 4자리까지 늘리면 비교가 완료되지 않을까?
2-1. 3333, 34, 30 => 34, 3333, 30
3. 문자 이어붙이기
4. 정답(str(answer)만 하면 000 => 000으로 출력되어서 실패. 000 => 0(int) => 0(str)로 나와야 함

반응형