본문 바로가기

Coding test

[백준/1422/파이썬] 숫자의 신

🔗 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. 정렬해서 한번씩 쓰는 형태를 만들어주면 된다.