동까의 코딩

[python] 프로그래머스 - 가장 큰 수 본문

문제 풀이/프로그래머스

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

동까의 코딩 2025. 3. 20. 18:23
반응형

파이썬 [프로그래머스] - 가장 큰 수

문제 설명

프로그래머스의 가장 큰 수 문제는 주어진 숫자 배열을 이어 붙여 만들 수 있는 가장 큰 수를 반환하는 문제입니다.
예를 들어, [6, 10, 2]가 주어지면 숫자들을 적절히 이어 붙여 6210을 만드는 것이 목표입니다.


문제 접근 방식

  1. 문자열 변환
    • 주어진 숫자들을 문자열로 변환합니다.
  2. 정렬 기준 설정
    • 각 숫자 문자열을 반복하여 비교 기준을 만듭니다.
      예를 들어, 숫자 3"333"으로, 숫자 30"303030"으로 변환하여 비교합니다.
    • 문자열은 첫 인덱스가 같으면 다음 인덱스로 넘어가서 대소비교를 하기 때문에 숫자 '30'이 뒤로 밀립니다.
  3. 내림차순 정렬
    • 변환된 문자열들을 내림차순으로 정렬하여, 이어 붙였을 때 가장 큰 수가 나오도록 합니다.
  4. 결과 조합 및 반환
    • 정렬된 문자열들을 이어 붙여 하나의 문자열로 만들고,
      int()를 이용해 불필요한 0을 제거한 후 최종 결과를 문자열로 반환합니다.

문제 풀이

def solution(numbers):    
    # 1. 숫자들을 문자열로 변환
    s = list(map(str, numbers))

    # 2. 각 숫자 문자열을 3번 반복하여 비교 기준 생성, 내림차순 정렬
    a = sorted(s, key=lambda x: x * 3, reverse=True)

    # 3. 정렬된 문자열들을 이어 붙여 하나의 문자열로 만든 후, 
    #    int로 변환해 불필요한 0을 제거한 뒤 다시 문자열로 반환
    return str(int("".join(a)))

주의사항 및 팁

문자열 곱셈 활용:
x * 3은 숫자 문자열 x를 3번 반복하여 비교 기준을 만드는 기법으로,
서로 다른 자리수의 숫자들을 효과적으로 비교할 수 있습니다.
정렬 기준의 중요성:
올바른 정렬 기준을 설정해야 이어 붙였을 때 가장 큰 수를 만들 수 있습니다.
결과값 처리:
최종 결과 문자열을 int()로 변환하면, "0"으로 시작하는 불필요한 경우를 제거할 수 있습니다.

반응형