https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
입력
numbers - 0 또는 양의 정수가 담긴 배열
출력
return - numbers 배열로 만들 수 있는 가장 큰 정수 (문자열로 반환한다.)
제한사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
풀이
막상 정답을 알면 허무한 코드이다. 단계별로 나누려고 했으나 너무 복잡하고 어려워서 그만 두었다.
문제 그대로 정렬할 때에 버블 정렬을 이용해서 정렬한다.
가령 a 정수와 b 정수가 주어졌다고 하자. ab와 ba 중에 큰 수로 정렬한다. a가 90이고 b가 9라면 909와 990이니 b가 앞으로 정렬되는 것이다. 따라서 말 그대로 코드도 이와 같이 짰다.
시간 복잡도는 정렬할 때 걸리는 시간 복잡도를 기준으로 O(nlogn)이다.
공간 복잡도는 배열을 저장하는 것이 가장 큰 경우이므로 O(n)이다.
코드
function solution(numbers) {
numbers.sort((a, b) =>
"" + a + b > "" + b + a ? -1 : 1
);
return numbers[0] == 0 ? "0" : numbers.join("");
}
두 번째 보는 것인데도 쉽지 않았다.
이거 말고는 좀 더 깔끔한 설명이 나오지 않을 거 같다.
이런 경우는 외워서 흡수하자.
728x90
'Computer > 알고리즘' 카테고리의 다른 글
[JS] 프로그래머스 K번째수 (2) | 2025.01.26 |
---|---|
[JS] 프로그래머스 주식가격 (1) | 2025.01.25 |
[JS] 프로그래머스 다리를 지나는 트럭 (3) | 2025.01.24 |
[JS] 프로그래머스 프로세스 (1) | 2025.01.23 |
[JS] 프로그래머스 올바른 괄호 (2) | 2025.01.22 |