728x90
문제 :
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
풀이 :
- 직관적으로는 앞자리가 큰 순서대로 정랼하는게 핵심이지만, 단순히 정렬하면 ["34","30","3"] -> 34303 이지만, 실제 정답은 34330 이기 때문에 단순히 정렬하면 안된다.
- 이 문제는 문자열을 3번 반복해서 비교하는 방식으로 풀면된다 ( 3-> 333 , 30 -> 303030)
- 파이썬은 문자열을 비교할 때 전체 길이를 보지 않고, 왼쪽 첫 번째 글지부터 하나씩 비교하기 때문에 가능하다
- 333 > 303030 이 더 크게 되는 이유이다 (3 vs 3 , 3 vs 0 .. 이런식으로 비교함)
# 문자열을 3번 반복해서 비교
def solution(numbers):
numbers=list(map(str,numbers))
numbers.sort(key=lambda x : x*3, reverse=True)
return str(int(''.join(numbers)))
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/42746
728x90
'알고리즘' 카테고리의 다른 글
| [프로그래머스] 모의고사 (0) | 2026.03.03 |
|---|---|
| [프로그래머스] H-Index (0) | 2026.02.26 |
| [프로그래머스] 주식 가격 (0) | 2026.02.25 |
| [프로그래머스] 프로세스 (0) | 2026.02.23 |
| [프로그래머스] 전화번호 목록 (0) | 2026.02.20 |