
🔍문제
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
| numbers | return |
| [6, 10, 2] | "6210" |
| [3, 30, 34, 5, 9] | "9534330" |
💡 풀이 과정
원소를 숫자 하나씩 쪼개서(ex. 123이면 1, 2, 3으로 쪼갬) 큰 숫자부터 차례대로 배치하는 식으로 코드를 생각했다.
def solution(numbers):
num_str = list(map(str,numbers))
num_str.sort(reverse=True)
answer = ''.join(num_str)
return answer
💣 문제 발생: 비교가 잘못됨

[3, 30, 34]라는 배열을 단순히 문자열 내림차순으로 정렬하면 [34, 3, 30]이 되지만,
이를 이어 붙이면 34330이 되기 때문에 테스트 결과에서 실패하는 결과가 나타났다.
큰 숫자가 맨 앞에 오도록 정렬하기 위해 람다를 사용하였다.
✏️ 개념: 람다함수

파이썬에서는 람다함수를 통해 이름이 없는 함수를 만들 수 있습니다.
람다함수의 장점은 코드의 간결함 메모리의 절약이라고 생각할 수 있습니다.
출처: 위키독스(https://wikidocs.net/22804
sorted함수의 경우 key위치인자에 함수를 보내서, 함수에서 지장한 결괏값에 따라서 정렬을 할 수 있다.
target = [' cat ', ' tiger ', ' dog', 'snake ']
불필요한 공백을 제외한 문자의 길이로 정렬하기 위해, 람다함수를 사용한다.
target = ['cat', 'tiger', 'dog', 'snake']
print(sorted(target, key=lambda x : len(x.strip())))
람다함수를 사용해서 숫자를 4번 반복하게 하였다. (원소는 0 이상 1000 이하이기 때문)
예를 들자면 3과 30을 비교할 때, 3333과 3030이 되어 3333이 더 크게 비교되도록 만들었다.
def solution(numbers):
num_str = list(map(str,numbers))
num_str.sort(key=lambda x:x*4, reverse=True)
answer = ''.join(num_str)
return answer

💣 문제 발생: 0의 출력 누락
테스트 1, 2는 해결하였지만,
000이면 0으로 출력해야 하지 않는 문제가 발생하였다.

조건문을 추가하여 배열이 0으로 시작한다면 답은 0으로 출력하도록 코드를 수정하여 문제를 해결하였다.
def solution(numbers):
num_str = list(map(str,numbers))
num_str.sort(key=lambda x:x*4, reverse=True)
if num_str[0]=='0':
answer='0'
else:
answer = ''.join(num_str)
return answer

🌟 최종 코드
def solution(numbers):
num_str = list(map(str,numbers))
num_str.sort(key=lambda x:x*4, reverse=True)
if num_str[0]=='0':
answer='0'
else:
answer = ''.join(num_str)
return answer'Python > 코딩 테스트' 카테고리의 다른 글
| [프로그래머스 - 완전탐색] 모의고사 (0) | 2024.09.10 |
|---|---|
| [프로그래머스 - 완전탐색] 최소직사각형 (0) | 2024.09.10 |
| [프로그래머스 - 정렬] K번째 수 (0) | 2024.09.10 |
| [프로그래머스 - 해시] 완주하지 못한 선수 (0) | 2024.08.22 |
| [프로그래머스 - 힙] 더 맵게 (0) | 2024.08.22 |
댓글