Algorithm_PYTHON
[프로그래머스_파이썬] 정렬_가장 큰 수
코리니덕
2021. 8. 25. 15:10
테케 통과, 시간초과 코드
- 아무래도 itertools를 사용해서 시간초과가 뜬 듯 하다.
- 문제에서 설명할 때, 배열 안에 있는 원소들 중 가장 큰 값을 구한다고 하니까 단순하게 itertools사용했음
- 정렬 카테고리에서 정렬을 쓰지 않았네
import itertools
def solution(numbers):
strings = list(map(str, numbers))
results = list(itertools.permutations(strings,len(numbers)))
arr = []
for result in results:
s = ''
for r in result:
s += r
arr.append(s)
return max(arr)
다른 풀이1
def solution(numbers):
strings = list(map(str, numbers))
# numbers의 원소는 항상 1000이하 -> 3자리로 맞춰서 비교하기 위함
# 문자열 정렬은 아스키코드를 기준으로 함
strings.sort(key=lambda x: x*3, reverse=True)
# '30', '3'의 순서
# 배열에 있는 값을 하나로 합치는 함수
# int로 변환했다가 다시 str로 변환하는 이유 : 뒤의 '000'을 처리하기 위함
return str(int(''.join(strings)))
다른 풀이2
import functools
def comparator(a,b):
t1 = a+b
t2 = b+a
return (int(t1) > int(t2)) - (int(t1) < int(t2)) # t1이 크다면 1 // t2가 크다면 -1 // 같으면 0
def solution(numbers):
n = [str(x) for x in numbers]
n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
answer = str(int(''.join(n)))
return answer
안풀다가 풀려고 하니까 더 어렵고 그렇네 ㅠㅡㅠ
분발하자!!