[프로그래머스] 가장 큰 수 in JavaScript

hyocho·2022년 6월 30일
4

코딩테스트

목록 보기
31/45

명확한 정리 필요

✅문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

  • 제한 사항
    numbers의 길이는 1 이상 100,000 이하입니다.
    numbers의 원소는 0 이상 1,000 이하입니다.
    정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

✍문제풀이

배열의 첫번째 원소들끼리 비교를 해야하나? 등등 별 이상한 생각을 오래 했지만.. 방법을 구할 수 없었다. 다른 사람들 문제 풀이에서 방법을 찾았는데😭

sort메서드를 이용하여 숫자 정렬을 할 때, 1, 12를 정렬할 때에 사용했던 아래의 방식을 사용하면 된다. 이 방식은 여태까지 많이 마주쳤음에도 추상적으로 대충 알았지, 작동하는 원리를 몰랐기 때문에 응용해서 쓸 수 없었다.

arr.sort(function(a,b){
         return a-b;
         });

여기서 function(a,b){return a-b}라는 함수는 a,b의 값을 빼서 양수가 나오면 배열에서 자리를 교체하고 음수가 나오면 교체하지 않는다. 여기서 a,b는 양옆에 붙어있는 수 일 수도, 아닐 수도 있다. 따라서 저 방식을 통하면 무조건, 오름차순으로 정렬할 수가 있다. 같은 방식으로 b-a이면 내림차순으로 정렬.

sort((a, b) => (b+a) - (a+b))

따라서 이번 문제는 위의 방식을 통하면 가장 큰 조합부터의 내림차순을 구할 수 있다.

나는 입력받은 정수를 먼저 계산하고, 마지막에 string 으로 변환해 주려고 했는데 자꾸 오답이 나서 다른 사람들의 답안을 보니,먼저 string 으로 변환해주는 식으로 작성하더라. string끼리의 연산이 되는 것인가?
이럴 때마다 기본 기초가 많이 부족한 것 같아서 괴리감이 든다 ㅠㅠ

function solution(numbers)
const answer = numbers
//map으로 numbers를 일관되게 string으로 변환한다.
	.map(numbers -> String(numbers))
    .sort((a,b) => (b+a) - (a+b))
    .join('');
    
//0인 경우는 제외해야 하니 삼항연산자 사용
    return answer[0] === '0' ? '0' : answer;

도움된 사이트 : https://change-words.tistory.com/64

profile
기록하는 습관을 기르고 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

잘보고갑니다!

답글 달기