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
반응형