Skip to content

Latest commit

 

History

History
150 lines (100 loc) · 1.75 KB

File metadata and controls

150 lines (100 loc) · 1.75 KB

Index


음이 아닌 정수가 N개 들어있는 리스트가 주어졌을 때, 리스트에 포함된 수를 나열하여 만들 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

입력

음이 아닌 정수가 N개 들어있는 리스트가 주어졌을 때, 리스트에 포함된 수를 나열하여 만들 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

출력

리스트에 포함된 수를 나열하여 만들 수 있는 가장 큰 수를 출력한다. 수는 0으로 시작하면 안되며, 0이 정답인 경우 0 하나를 출력해야 한다.

예제

입력 1

5
3 30 34 5 9

출력 1

9534330

입력 2

5
0 0 0 0 1

출력 2

10000

Solution

import sys

read = sys.stdin.readline


def masking(num):
    l = len(num)
    return num + (9 - l) * "0", l


if __name__ == "__main__":
    N = int(read())
    nums = list(map(masking, read().split()))
    nums = sorted(nums, key=lambda n: int(n[0]), reverse=True)
    ans = ""
    for value, length in nums:
        ans = max(ans + value[:length], value[:length] + ans)
    print(int(ans))

"""
3
98 9 981

998981
"""

"""
2
32 3

332
"""

"""
2
34 3

343
"""

"""
3
123 12 3

312312
"""

"""
2
21 2122

212221
"""

"""
2
12 1211

121211
"""


"""
3
1211 12 12111

12121112111
"""


"""
3
21 2122 21222

21222212221
"""

"""
2
1221 12211

122112211
"""
from functools import cmp_to_key

input()
arr = sorted(
    input().split(), key=cmp_to_key(lambda a, b: 1 if int(a + b) < int(b + a) else -1)
)
print(int("".join(arr)))