문제 설명
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" |
문제 풀이
가장 큰 수 문제는 문제를 해결하는 아이디어를 떠올리는 것이 정말 어려웠다.
주어진 정수가 있을 때 가장 큰 수를 알아내기 위해서는
수의 길이를 맞춰주어야 한다.
이때, 문제 조건에서 numbers의 원소는 1000이하라고 했으므로
원소의 길이는 최소 1이므로 길이를 맞춰주기 위해 모두 3을 곱해준다.
666, 101010, 222 이렇게 세 수가 있다고 할 때
문자열은 앞에서부터 비교하여 큰 수를 판단하므로
6210이 가장 큰 수가 된다.
333, 303030, 343434, 555, 999 일 때는
9534330이 가장 큰 수가 된다.
즉, 가장 큰 수를 찾기 위해서는 문자열의 앞의 원소부터 차례로 비교해서
가장 큰 수를 찾으므로 길이를 모두 동일하게 맞춰주고 비교하면 가장 큰 수를 찾을 수 있는 것이다.
따라서 먼저 모두 문자열로 만들어준 뒤 길이를 맞춰 내림차순으로 정렬해주고
하나로 합친 최종 문자열을 얻을 수 있었다.
이때, int로 바꿔준 뒤 다시 str로 바꿔주는 이유는
000과 같은 문자열이 있을 때 0으로 만들어줘야하기 때문이다.
이 마지막 조건을 생각하는 데에도 어려움이 있었던 것 같다.
My Code
def solution(numbers):
answer = ''
numbers = [str(i) for i in numbers]
numbers.sort(key = lambda x: x*3, reverse = True)
answer = str(int(''.join(numbers)))
return answer
'프로그래머스 > 고득점 Kit' 카테고리의 다른 글
[프로그래머스] 이중우선순위큐 - Python / 파이썬 (1) | 2023.03.16 |
---|---|
[프로그래머스] H-Index - Python / 파이썬 (0) | 2023.03.15 |
[프로그래머스] 징검다리 - Python / 파이썬 (0) | 2023.03.13 |
[프로그래머스] 순위 - Python / 파이썬 (0) | 2023.03.06 |
[프로그래머스] 등굣길 - Python / 파이썬 (0) | 2023.03.03 |
댓글