얼렁뚱땅 스며드는 Data Science

Algorithm/Daily Coding Tests Challenge

[프로그래머스] level2. 가장 큰 수

Jesip14 2021. 9. 15. 16:38

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

나의 풀이

def solution(numbers):
    answer = ""
    temp = sorted(numbers, key = lambda x : (str(x)[0], x % 10, x % 100, x % 1000), reverse = True)
    for i, num in enumerate(temp[:-1]):
        if (num//100 > 0) and (num//10 == temp[i + 1]) and (num % 100 < num // 100):
            temp[i], temp[i + 1] = temp[i + 1], num
        answer += str(temp[i])
    answer += str(temp[-1])
    
    if answer == "0" * len(numbers):
        return "0"
    else:
        return answer

제 코드는 여러 테스트케이스에서는 올바른 정답이 나왔지만 최종 테스트로는 실패가 자꾸 떠서 다른 분들의 코드를 한번 참조를 하였습니다. numbers들의 숫자를 모두 문자열로 바꿔준 뒤, sort 기준을 x를 네번 곱해 앞의 4개의 숫자를 비교해주는 방식으로 정렬을 해주었습니다. 

def solution(numbers):
    numbers = [str(x) for x in numbers]
    list_max = sorted(numbers, key = lambda x : (x * 4)[:4], reverse = True)
    
    if list_max[0] == "0":
        return "0"
    else:
        return "".join(list_max)

이번 문제가 간단해보이지만 소소하게 오류나는 부분이 생각보다 많은 시간이 들었습니다. 정말 어렵네요......

 

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42746#

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr