본문 바로가기
알고리즘/프로그래머스

Programmers 2 레벨 테스트 1

by JayAlex07 2023. 2. 7.

Programmers 2 레벨 테스트 1

 

문제

숫자가 담겨있는 배열이 주어진다.

그 배열 안에 있는 숫자들을 나열하여, 제일 큰 숫자를 만드는 것이다.

[6, 20, 4] 가 있다면 6420을 출력하는 것

각 숫자는 1부터 1000까지의 숫자다. 즉 999가 제일 큰 숫자.

문제 풀이

  • 배열 안에 있는 숫자들을 문자열로 만든다
    • 그렇게 하면 숫자의 제일 앞 자리 숫자를 기준으로 순차적으로 배열을 해준다
  • 각 문자열을 4번을 반복시키고, 그 중 4자리를 가지고 온다.
    • 4자리는 1부터 10000까지의 숫자가 주어져서 최대 4자리가 되는 것
    • 4번 반복하는 이유는 (람다를 사용한다)
      • [6, 21, 2, 8] 이 주어졌을 때
      • 먼저 정렬을 하면 [8, 6, 21, 2] 가 된다
        • 제일 크게 만드려면 86221이어야 한다
      • [8888, 6666, 2121, 2222] 를 하면 [8888, 6666, 2222, 121]로 정렬이 된다
        • 즉 [8, 6, 2, 21]로 정렬을 할 수 있다

 

코드

def solution(numbers):

    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x: (x * 4)[:4], reverse=True)

    if numbers[0] == '0':
        return '0'
    else:
        return ''.join(numbers)

numbers.sort(key = lambda x: (x * 4)[:4], reverse=True)

  • 내림차 순으로 정렬을 하는 것이다
  • x 즉 문자열을 4로 곱한 후, 인덱스 0부터 4까지 기준으로 내림차 순으로 정렬을 한다
    • [8, 21, 6, 2] ▶️ [8888, 2121, 6666, 2222] ▶️ [8888, 6666, 2222, 2121] ▶️ [8, 6, 2, 21]