문제
https://school.programmers.co.kr/learn/courses/30/lessons/42746#
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
0 또는 양의 정수가 주여졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 만들어라.
가장 큰 수를 만들려고 할 때, 단순하게 생각하면 주여진 수들 중 큰 수가 먼저 나와야 된다는 것을 알 수 있다.
이 때 큰 수는 정수일 때 절대적으로 큰 수가 아닌, 문자열일 때 큰 수를 의미한다.
그럼 "9"라는 숫자가 먼저 나와야 되는데, "98" 과 "9"를 어떤 기준으로 어떤 수를 먼저 붙여야 될까?
일단 위와 같은 상황을 토대로 생각을 해보면 정렬을 해야 된다는 것은 알 수 있다.
정렬을 할 것인데, 어떤 기준으로 정렬을 할 것이냐?
단순하게 생각해보면, 두 수를 당장 붙인다고 생각했을 때 두 개의 수를 붙였을 때 더 큰 것을 붙이게끔 정렬하면 된다.
이것을 그대로 정렬 기준으로 두면 된다.
x, y라는 숫자를 각각 문자열로 만들어준 뒤에
"xy" 와 "yx"를 비교해서 더 큰 것을 기준으로 정렬하며 된다.
그런 뒤에 모두 합쳐서 출력하면 되는데, 문제는 문제에서 0이 나온다고 돼있다.
그렇기 때문에 0만 포함된 숫자들이라면 0을 리턴하게 하면 된다.
정답코드
더보기
'''
'25. 11. 11.(화) 빼빼로 데이..?
1. 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
343
334
3430
34
이해 됐다.
1. 일단 큰 수부터 먼저 나와야 하며
2. 맨 앞자리가 같다면
34, 30 이면
당연히 34가 먼저 나오는 것이 좋음.
34보다 3은 34가 먼저 나오는 것이 좋긴 함
근데
3이랑 30은
3이 먼저 나온느 것이 이득이지.
334 보다
343이 늦기 때문에
334 먼저 ㄱ
'''
from functools import cmp_to_key
def compare(x: int, y: int) -> int:
str_x, str_y = str(x), str(y)
if str_x + str_y < str_y + str_x:
return 1
elif str_x + str_y == str_y + str_x:
return 0
return -1
def solution(numbers):
answer = ''
numbers.sort(key=cmp_to_key(compare))
for num in numbers:
answer += f'{num}'
if answer[0] == '0':
answer = '0'
return answer
깃허브 : https://buly.kr/H6inz4N
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 분할정복 / 쿼드압축 후 개수 세기 (0) | 2025.11.13 |
|---|---|
| 프로그래머스 / 슬라이딩 윈도우 / 두 큐 합 같게 만들기 (0) | 2025.11.12 |
| 프로그래머스 / 비트마스킹 / 2개 이하로 다른 비트 (0) | 2025.11.08 |
| 프로그래머스 / 구현 / [1차] 프렌즈4블록 (0) | 2025.11.02 |
| 프로그래머스 / 정규표현식, 문자열 / [3차] 파일명 정렬 (0) | 2025.11.01 |