CS/코딩 테스트
[레벨2][정렬] 가장 큰 수
DandyNow
2024. 2. 15. 17:01
728x90
반응형
1. 문제
numbers 배열의 요소는 0~1000의 숫자이다. 이 숫자를 이어 붙여 가장 큰 숫자를 만들어야 한다.
😉 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=python3
2. 풀이
처음에는 for문과 순열을 이용해 풀이했는데 "시간 초과" 되었다. 고민도 하고 힌트도 찾다가 어썸 한 풀이법을 발견했다.
# 파이썬 풀이
def solution(numbers):
# 1. 모든 수를 문자열로 변환
numbers = list(map(str, numbers))
# 2. x+y와 y+x를 비교하여 정렬
numbers.sort(key=lambda x: (x * 4)[:4], reverse=True)
'''
코드 설명:
sort 메서드의 키에 람다 함수 결과 값이 반환된다.
요소가 "3"이라면 "3333"이 되고 "30"이라면 "3030"이 반환된다.
반환된 키값을 기준으로 내림차순 정렬하면-"3333"이 "3030" 보다 큰 값이므로-"3"이 "30"보다 큰 값으로 정렬된다.
'''
# 3. 정렬된 numbers를 이어붙인 뒤 반환
answer = str(int(''.join(numbers)))
'''
코드 설명:
리스트의 모든 요소가 0이라면 0이 반환되어야 한다.
단순히 문자열을 이어붙이기 하면 요소의 수 만큼 불필요한 0이 붙게 된다.
"000"을 정수로 변환하면 0이되고, 다시 문자열로 변환한다.
'''
return answer
print(solution([3, 30, 34, 5, 9])) # "9534330"
print(solution([0, 0, 0])) # "0"
728x90
반응형