문제

[백준] 큰 수 만들기 (Platinum 5)

요약

N개의 숫자가 주어지면, 해당 숫자들을 나열하여 만들 수 있는 수들 중 가장 큰 수를 구하여라

분류

  • 그리디
  • 정렬

풀이

1. 내 풀이 (그리디 + 정렬)

이전에 어떤 코드트리 문제를 풀다가 마주한 아이디어가 있다. 숫자의 대소를 비교할 때, 전체 자리수에 상관없이 큰 자리수부터 비교하고 싶다면 a+b 와 b+a 의 대소를 비교하면 된다는 것이다. 해당 아이디어가 이 문제를 푸는 데 유효했다.

n = int(input())
arr = list(input().split())
m = 0
for a in arr:
    m = max(m, len(a))
arr.sort(key=lambda x: x * m, reverse=True)

print(int("".join(arr)))

숏코딩

i=input;i();print(int("".join(sorted(i().split(),key=lambda x:x*10)[::-1])))