728x90
링크
https://www.acmicpc.net/problem/16496
난이도
플래티넘5
풀이
functools
모듈의 cmp_to_key
를 사용했다. 이 cmp_to_key는, 람다로는 불가능한 두 연산값들끼리의 비교를 할 때 유용하게 사용할 수 있다.
우선 문제 자체에 대해서는 그냥 수들을 이어붙여서 최댓값을 만들기만 하면 되는 문제였는데, 어떻게 최댓값을 만드는지를 생각하기가 어려운 문제였다고 생각한다. 결론부터 이야기하면 직접 두 숫자 a, b를 ab, ba 형태로 붙여봤을 때 값이 더 큰 경우에 해당하는 숫자가 앞으로 오도록 정렬 기준을 설정하면 된다. 그리고 이 ab와 ba의 크기를 비교하는 것을 cmp_to_key로 할 수 있다.
arr내의 두 값을 이어 붙인 값이 클수록 앞으로 위치하게 되고 작을수록 뒤로 위치하게 되어 arr.sort(key=cmp_to_key(compare))
로 이러한 배열이 완성이 된다.
다만 여기에서 주의해야 할 점은 0이 여러개 있을 경우 그 0을 전부 출력하는 것이 아닌, '0' 하나만 출력해야 되므로 정렬한 배열 arr에서 0의 개수가 arr의 길이와 같은 경우에 한해 0만 출력하도록 예외설정을 해주면 된다.
'CS > 알고리즘' 카테고리의 다른 글
[Python] BOJ(백준) 12852번 - 1로 만들기 2 (0) | 2022.03.05 |
---|---|
[Python] BOJ(백준) 1294번 - 문자열 장식 (0) | 2022.02.21 |
[Python] BOJ(백준) 2589번 - 보물섬 (0) | 2022.02.02 |
[Python] BOJ(백준) 15591번 - MooTube (Silver) (0) | 2022.01.28 |
[Python] BOJ(백준) 15655번 - N과 M(6) (0) | 2022.01.15 |