-
[BOJ 16496, Python 3] 큰 수 만들기알고리즘/BOJ 2021. 8. 18. 20:31반응형
https://www.acmicpc.net/problem/16496
풀이
정렬 방법은 의외로 간단합니다. 숫자로 이루어진 문자열 a, b 두 개가 있을 때 int(a+b), int(b+a)를 하여 비교를 해주면 됩니다.
이 문제에서는 큰 수를 만드는 것이므로 큰 수가 앞으로 오게하면 되겠네요.
C++에서 compare로 비교하는 경우가 많지만, 파이썬에서는 key= lambda x: blah blah로 하면 많은 정렬 문제를 해결할 수 있습니다.
하지만 이 문제와 같이 int(a+b)와 int(b+a)처럼 2개의 원소를 비교하는 것은 단순히 key와 lambda 조합으로 풀 수 없고, functions 모듈에 있는 cmp_to_key라는 함수를 이용해야 합니다. 거의 쓸 일이 없어서 아마 처음보는 분들이 많을 거에요.
cmp_to_key에 대한 자세한 내용은 https://lucky516.tistory.com/4 이 글을 참조하시면 됩니다.
코드
1234from functools import cmp_to_keyinput()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)))cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 20949, Python 3] 효정과 새 모니터 (0) 2021.08.25 [BOJ 1422, Python 3] 숫자의 신 (0) 2021.08.18 [BOJ 4716, Python 3] 풍선 (1) 2021.08.18 [BOJ 9576, Python 3] 책 나눠주기 (0) 2021.08.17 [BOJ 1135, Python 3] 뉴스 전하기 (0) 2021.08.17