🔗 Link
🧩 Source Code
from functools import cmp_to_key
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
numbers = [input().strip() for _ in range(n)]
max_num = str(max(map(int,numbers)))
for _ in range (m-n):
numbers.append(max_num)
def compare(x, y):
if x + y > y + x:
return -1
elif x + y < y + x:
return 1
else:
return 0
numbers.sort(key=cmp_to_key(compare))
one_used = int(''.join(numbers))
print(str(one_used))
📝 Commentary
꽤나 유명한 문제로 알고 있는데 아마 프로그래머스에서 봤던 것 같다.
다른 풀이로는 * 10000000뭐 이런 식으로 해당 숫자를 문자로 바꿔서 비교하는 것으로 알고 있다.
나는 책에서 봤던 풀이가 명확해서 이 방법을 주로 사용해서 풀곤 한다.
간단하게 설명하면
3, 30 이런 숫자를
330과 303 이렇게 비교를 해서 하는 풀이이다.
풀이과정
1. 가장 큰 수를 여러번 사용하면 되므로 이 숫자를 m-n번 넣어준다.
2. 두 숫자 모두 문자로 생각해서 형변환을 여러번 해준다.
3. 정렬해서 한번씩 쓰는 형태를 만들어주면 된다.
'Coding test' 카테고리의 다른 글
[프로그래머스 / 파이썬 ] 풍선 터트리기 (0) | 2024.12.30 |
---|---|
[ 프로그래머스/ 파이썬 ] [1차] 셔틀버스 (1) | 2024.12.29 |
[백준/ 파이썬/ 21608] 상어 초등학교 (0) | 2024.12.27 |
[Softeer/Javascript] 징검다리 (0) | 2024.10.28 |
99클럽 코테 스터디 42일차 TIL, 프로그래머스 / 코딩테스트공부 (4) | 2024.09.01 |