Algorithm

[Javascript] 가장 큰 수

합주기 2025. 1. 11. 01:24

목차

1. 문제 설명
2. 문제 풀이
3. 정답 코드

 

1. 문제 설명

0 또는 양의 정수들을 집합이 주어졌을 때 그 수들을 붙여서 만들수 있는 가장 큰 수를 구하는 문제이다.

입출력 예는 다음과 같다.

 

주의할 점

numbers를 내림차순하여 이어붙인 것이 반드시 가장 큰 수는 아니다.

만약, 2번째 예시를 내림차순 방식으로 답을 구한다면 → "9534303" 이다.

하지만 가장 큰 수는 "9534330" 이므로, 

다른 방식을 찾아야했다!

 

2. 문제 풀이

만약 [3, 30] 이 주어진다면, 가장 큰 수는 "330" 이다.

내림차순을 결정하는 수는 2개의 수를 더한 수이다. ( ≠ 각 수를 내림차순)

 

(참고) 기본 sort 함수 사용법

[1,2,3,4].sort((a, b)=> b - a);

 

a는 뒷번호, b는 앞번호이다. 

b - a 가 양수라면, 자리 교환을 하지 않는다. 👉 앞번호가 뒷번호보다 크면, 자리 교환을 하지 않는다.

b - a 가 음수라면, 자리 교환을 한다. 👉앞번호가 뒷번호보다 작으면, 자리 교환을 한다.

 

👉 내림 차순 정렬을 보장한다.

 

3. 정답 코드

function solution(numbers) {
    var answer = '';
   
    // 두 수를 앞 뒤로 붙여서 내림차순 정렬함
    numbers.sort((a, b)=> ("" + b + a ) - ("" + a + b))
  
    answer = numbers.join("")
 
    return answer[0] === "0"? "0": answer;
}

 

주의할 점

[0,0] 인 경우 그대로 이어붙이면 "00" 이 된다.

이 값을 "0" 으로 만들어 주는 작업을 거쳐야한다.

'Algorithm' 카테고리의 다른 글

[Javascript] 소수 찾기  (2) 2025.01.21
[Javascript] 더 맵게  (0) 2025.01.11
[Javascript] 롤케이크 자르기  (1) 2025.01.11
순열, 조합 문제 풀이 (with. Python)  (3) 2024.12.13
백준 21315. 카드 섞기  (1) 2024.12.07