Programmers 2 레벨 테스트 1
문제
숫자가 담겨있는 배열이 주어진다.
그 배열 안에 있는 숫자들을 나열하여, 제일 큰 숫자를 만드는 것이다.
[6, 20, 4]
가 있다면 6420을 출력하는 것
각 숫자는 1부터 1000까지의 숫자다. 즉 999가 제일 큰 숫자.
문제 풀이
- 배열 안에 있는 숫자들을 문자열로 만든다
- 그렇게 하면 숫자의 제일 앞 자리 숫자를 기준으로 순차적으로 배열을 해준다
- 각 문자열을 4번을 반복시키고, 그 중 4자리를 가지고 온다.
- 4자리는 1부터 10000까지의 숫자가 주어져서 최대 4자리가 되는 것
- 4번 반복하는 이유는 (람다를 사용한다)
- [6, 21, 2, 8] 이 주어졌을 때
- 먼저 정렬을 하면 [8, 6, 21, 2] 가 된다
- 제일 크게 만드려면 86221이어야 한다
- [8888, 6666, 2121, 2222] 를 하면 [8888, 6666, 2222, 121]로 정렬이 된다
- 즉 [8, 6, 2, 21]로 정렬을 할 수 있다
코드
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key = lambda x: (x * 4)[:4], reverse=True)
if numbers[0] == '0':
return '0'
else:
return ''.join(numbers)
numbers.sort(key = lambda x: (x * 4)[:4], reverse=True)
- 내림차 순으로 정렬을 하는 것이다
x
즉 문자열을 4로 곱한 후, 인덱스 0부터 4까지 기준으로 내림차 순으로 정렬을 한다[8, 21, 6, 2]
▶️[8888, 2121, 6666, 2222]
▶️[8888, 6666, 2222, 2121]
▶️[8, 6, 2, 21]
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Java 문제풀이 (Programmers) (0) | 2023.06.14 |
---|---|
[Java] 문제풀이 (Programmers) (0) | 2023.05.26 |
Programmers 2 레벨 테스트 2 (1) | 2023.02.07 |
[Python] 프로그래머스 - 소수 구하기 (2) | 2023.01.18 |