프로그래머스 JS 가장 큰 수

이명진·2022년 3월 22일
0

코드카타

목록 보기
11/69

프로그래머스 가장 큰 수 JS

가장 큰 수. 정렬 문제이다. 정렬을 아직 확실히 이해하지 못하여서 어렵게 생각한다. 하지만 출제율이 상당이 높단다 ㅠㅠ

문제 설명

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

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

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

문제 풀이

문제 를 풀기 위해서 생각해 보았다.
일단 같은 자리수를 비교한다음에 정렬을 해야 하고 만약 같은 자리수가 같다면 한번더 for문이나 map을돌려서 다시 비교를 해줘야 하고.. 상당히 머리가 아팠다.
그래서 비교해주는 함수를 만들기로 생각하였다.

큰 수를 저장해두고 큰 수와 그 큰 수를 뺀 나머지 배열을 리턴해주고

리턴 한 배열 값의 길이가 0일때까지 반복하는 것이었다.

하지만 이런 저런 문제들이 많이 발생하게 되어서 대략 1~2시간 정도 수정을 반복하다가 결국 힌트를 보기위해서 구글에 검색하게 되었다.

생각 보다 풀이는 간단했다.

function solution(numbers) {
var answer = numbers.map(v=>v+'')
.sort((a,b) => (b+a)1 - (a+b)1)
.join('');
return answer[0]==='0'?'0':answer;
}

map을 돌려서 일단 string값으로 변환 해준다. 그리고 배열의 앞뒤 문자들을
더한다 문자이기 때문에 10+10이 1010이 되기 때문에 비교가 된다.
하지만 저 방법이 정말 모든 것을 다확인할수 있는지 의문 이라는 생각이든다.
배열안에 값이 많을때 앞뒤 비교를 하고 정렬하고 앞뒤 비교를 하고 정렬하고 하는 일대일 로 비교 하는 방법인가 싶다.
그리고 정렬한것을 join을 통해서 더해준다.

그리고 방어 기법으로 앞자리 수가 0일때 0을 리턴해준다.

정말 쉽게 풀었다..
레벨 2단계에 진입했는데 확실히 어렵다.
빨리 코테 장인이 되고 싶다

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글