728x90
문제
0 또는 양의 정수가 주어졌을 때 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내자.
입력
0 또는 양의 정수가 담긴 배열 numbers가 입력된다.
출력
순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 출력한다.
접근
처음에 numbers에 담긴 숫자들을 문자형으로 바꾸고 리스트에 저장 한다음에 내림차순으로 정렬하여 출려하면 될 줄 알았지만 예외 케이스가 많았다.
먼저 34, 30, 3으로 정렬이 되었고 이대로 출력하면 34303이되어 가장 큰 수인34330이 나오지 않는다.
따라서 현재 문자와 다음 인덱스의 첫 글자가 같을 때 현재 문자의 두 번째 글자가 0이면 스왑을 해주었는데 입력되는 수는 1000이하였기 때문에 한계가 있었다.
이를 해결하는 것이 문자형으로 변경된 리스트의 각 원소들에 x3을 해주는 것이다. 문자에 x 연산을 하면 해당 문자를 반복하게 되는데 이를 통해 자릿수를 맞출 수 있다.
이후에 만약 0 세 개가 들어온다면 000이 출력되기 때문에 int형으로 변형 후 다시 str로 변형을 시켜줘야 했다.
구현
sorted 함수로 numbers를 정렬할 때 key에 lambda를 사용하여 원소들에 x3 후에 비교하도록 하였고 reverse를 True로 하여 내림차순 정렬을 하였다.
그리고 join을 각 원소들을 묶은 후에 0이 00 등으로 나오는 것을 방지하기 위해 int로 변형 후에 다시 str로 변형하였다.
def solution(numbers):
numbers = list(map(str, numbers))
numbers = sorted(numbers, key=lambda x: x*3, reverse=True)
answer = str(int(''.join(numbers)))
return answer
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[Level 2] 올바른 괄호 (0) | 2021.02.21 |
---|---|
[Level 2] 더 맵게 (0) | 2021.02.21 |
[Level 2] 구명보트 (0) | 2021.02.20 |
[Level 2] 전화번호 목록 (0) | 2021.02.19 |
[Level 3] 2xn 타일링 (0) | 2021.02.19 |