반응형
SMALL
[정렬]
태그 설명
정렬이란?
정렬이란 데이터의 집합을 어떠한 기준의 대소관계를 따져 일정한 순서로 줄지어 세우는것
문제
프로그래머스 문제 - 가장 큰 수
링크: 가장 큰 수
문제설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
즉, 리스트 내부의 숫자를 이용하여 새로운 숫자들의 조합을 생성하고 가장 큰 수를 추출해내면 된다.
📃 소스코드 및 설명(시간 초과 코드)
from itertools import permutations
def solution(numbers):
numbsers_str = []
# 리스트 내부의 요소들의 조합을 생성한다
result = list(permutations(numbers,len(numbers)))
for i in result:
new_str=''
for j in i: # tuple class
new_str += str(j)
numbsers_str.append(int(new_str))
return str(max(numbsers_str))
위의 방식으로 했을때는, 시간 초과가 나서 다시 시도!
기존의 permutations를 사용하지 않는 방식으로 처리를 해야한다고 한다..(많은 사람들이 permutations를 사용해서 처리한거 같던데,,,)
결국 다른 아이디어가 없어서 다른 사람의 코드를 해석하기로 했다..
📃 소스코드 및 설명(통과 코드)
import functools
def comparator(a,b):
# n에서 숫자 2개를 추출 후! 내 조건식에 대입해서 비교 후 a를 기준으로 정렬!
# EX) a+b = 610, b+a = 106
t1, t2 = a+b, b+a
# 비교!
print(f"comparator: {a},{b} -> {t1},{t2} -> {(int(t1) > int(t2)) - (int(t1) < int(t2))}")
# 비교 후 크다: 1 ex) (5 > 4) - (5 < 4)
# 비교 후 작다: -1 ex) (3 > 4) - (3 < 4)
# 같다 : 0 ex) (4 > 4) - (4 < 4)
# t1이 크다면 1 // t2가 크다면 -1 // 같으면 0
return (int(t1) > int(t2)) - (int(t1) < int(t2))
def solution(numbers):
n = list(map(str, numbers))
print(f'input -> {n}')
# cmp_to_key 함수 사용하여 나만의 정렬 함수 생성!!
# sorted의 key는 0,1,-1로 비교를 하기 때문에 comparator라는 함수를 통해서 비교를
n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
print(f'n -> {n}')
answer = str(int(''.join(n)))
return answer
반응형
LIST
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[BOJ][Python] 1026번 - 보물[정렬- 실버 4티어] (0) | 2022.03.12 |
---|---|
[BOJ][Python] 1015번 - 수열 정렬[정렬- 실버 4티어] (0) | 2022.03.12 |
[BOJ][Python] 14719번 - 빗물 [시뮬레이션 기본 - 골드 5티어] (0) | 2022.03.10 |
[백준알고리즘]백준 1065 파이썬 편김에 끝까지::우주를놀라게하자 (0) | 2019.09.16 |
[백준알고리즘]백준 1008 파이썬 편김에 끝까지::우주를놀라게하자 (0) | 2019.09.16 |