소스 코드
def solution(numbers):
numbers = list(map(str, numbers))
sort = sorted(numbers, key=lambda x :(x*4)[:4], reverse=True)
result = ''.join(sort)
if (int(result)) == 0:
return '0'
else:
return str(result)
풀이
이번 문제의 핵심은 주어진 정수를 문자열로 바꾸어 정렬을 하는 것이다. 정수 형태의 비교는 값의 '크기'를 비교하지만 문자열의 비교는 사전식으로 어떤 문자열이 더 앞 순에 위치하는 지를 비교한다.
따라서 맨 처음에 리스트에 존재하는 정수를 모두 문자열로 바꾸었고 이후 sorted 함수를 사용하였다. 이때 key 값으로 lambda를 사용하여 해당 문자열을 4번 concat한 다음 4번째 까지만 slicing 하였다. 그 이유는 문제에서 numbers의 원소는 0 이상 1,000 이하라고 했기 때문에 0000 모든 문자열을 xxxx 형태로 통일하여 비교하기 위해서 이다. (사실 최대 4자리이기 때문에 3번만 반복해도 됐지만..)
sort 리스트에는 정렬된 문자열들이 저장되고, join을 통해 합쳐주었다.
최종 문자열 형태가 0000일 경우 '0'을 리턴해주기 위해 마지막 조건문을 추가하였다.
'Python > 알고리즘' 카테고리의 다른 글
힙 Level 3 이중 우선순위 큐 - python (프로그래머스) (1) | 2023.05.08 |
---|---|
힙 Level 2 더 맵게 - python (프로그래머스) (0) | 2023.05.08 |
해시 Level 1 완주하지 못한 선수 - python (프로그래머스) (0) | 2023.05.01 |
그리디 Level 1 체육복 - python (프로그래머스) (0) | 2023.05.01 |
완전탐색 Level 1 모의고사 - python (프로그래머스) (0) | 2023.05.01 |