HealthyAI

Programmers) level2. 가장 큰수 본문

Coding test/프로그래머스

Programmers) level2. 가장 큰수

BiteApple 2023. 1. 19. 15:45
반응형

처음에는 itertools의 permutations 함수를 사용해서 풀었는데 런타임 초과 문제로 다른 방법을 찾아야 했다.

from itertools import permutations
def solution(numbers):
    answer = ''
    stack = []
    numbers = [str(i) for i in numbers]
    for p in permutations(numbers, len(numbers)):
        stack.append(int(''.join(p)))
    return str(max(stack))

이 과정에서 functools 모듈의 cmp_to_key 함수를 알게 되었다. 두 문자의 결합을 비교하여 1,0 반환 시 위치를 그대로 하고 -1 반환 시 위치를 바꿔준다.

from functools import cmp_to_key
def solution(numbers):
    answer = ''
    numbers = [str(i) for i in numbers]
    numbers = sorted(numbers, key = cmp_to_key(comparator), reverse = True)
    return str(int(answer.join(numbers)))
    
def comparator(a, b):
    t1 = a + b
    t2 = b + a
    return int(t1 > t2) - int(t1 < t2)
	#t1이 크면 1을, t2가 크면 -1, 같으면 0을 반환한다.
반응형