문제를 정리해보자.
"주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다."
주어진 정수를 이용해 가장 큰 수를 만들면 된다.
처음에는 완전 탐색을 시도했다. 하지만 시간초과로 실패했다.
두 번째에는 DFS를 시도했다. 하지만 구현에 어려움을 겪어 포기했다.
알고 보니 푸는 방법은 간단했다.
먼저 제한 사항을 보자.
예를 들어 [8, 883] 있다.
원소의 크기가 0이상 1,000 이하이므로, 각 원소를 문자열로 보고 3을 곱해준다.
(1,000이 최대여서 4를 곱할 필요가 없다.)
[888, 8838838883]
주의해야 할 점은 [0, 0, 0, 0] 같은 예이다.
0000이라는 수는 없다. 0으로 출력해야 한다.
def solution(numbers):
li = []
answer = ''
if not sum(numbers):
return '0'
else:
for x in numbers:
li.append((str(x) * 3, str(x)))
li.sort(reverse=True)
for num in li:
answer += num[1]
return answer
print(solution([6, 10, 2]))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python] 이중우선순위큐 (0) | 2021.12.02 |
---|---|
[프로그래머스][Python] H-Index (0) | 2021.12.02 |
[프로그래머스][Python] K번째수 (0) | 2021.11.26 |
[프로그래머스][Python] 주식가격 (0) | 2021.11.25 |
[프로그래머스][Python] 더 맵게 (0) | 2021.11.25 |