블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
본 문제의 저작권은 프로그래머스(https://programmers.co.kr/)에 있습니다.
문제
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
Coding - Python3
처음에는 뒤에 0을 붙여서 모두 같은 자릿수를 만든다음 크기를 비교하면 된다고 생각했다.
하지만, 반례가 존재한다. [12, 121]
를 보면 "12121
" 이 답이어야 한다.
0을 붙이는 방법을 사용하면 [120, 121]
이고, "12112
" 가 답이 된다.
그래서 (구글 검색의 도움으로) 같은 수를 이어 붙이는 방법을 사용했다.
def solution(numbers):
return str(int("".join(sorted(map(str, numbers), key=lambda x: x * 3, reverse=True))))
[12, 121]
은 [121212, 121121121]
를 문자열 비교를 하게 되면,
4번째 원소에서 1212
12가 1211
21121 보다 아스키코드가 더 크기 때문에 "12121
" 이 된다.
위 코드를 설명을 위해 풀어쓰면
def solution(numbers):
str_numbers = map(str, numbers) # 각 원소를 문자열로 변환
sorted_numbers = sorted(
str_numbers,
key=lambda x: x * 3, # 각 원소에 3을 곱한다. (문자열 곱셈)
reverse=True) # 내림차순 정렬
return str(int("".join(sorted_numbers)))
Reference
반응형
'Algorithm' 카테고리의 다른 글
시간 복잡도 (빅오, 빅오메가, 빅세타) (0) | 2020.06.03 |
---|---|
KAKAO 2020 공채 코딩 테스트 - 문자열 압축 (with Python3) (0) | 2020.04.04 |
Programmers - K번째수 (Python3) (0) | 2020.04.02 |
미로 찾기 알고리즘 BFS, DFS (with Python3) (0) | 2020.04.01 |
탐색 알고리즘 BFS 응용하기 (친밀도 구하기) (0) | 2020.04.01 |