반응형
문제
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
나의 풀이
방법1(오답)
function solution(numbers) {
const arr = numbers.map((el,idx)=> {
if (el >= 10){
while(el >= 10){
el = el/10
}
}
return {'el':el,index:idx}
})
return arr.sort((a,b)=>b.el-a.el)
.reduce((acc,ele)=> acc += numbers[ele.index]+(""),"")
}
30이랑 3이 같은 수가 되버린다. => 실패
방법2. 재귀함수(오답)
function solution(numbers) {
var answer = '';
function re (arr,selectnum){
const result = [];
if (selectnum == 1) return arr.map((el)=>[el]);
arr.forEach((fixed,index,origin)=>{
const nextarr = [...origin.slice(0,index),...origin.slice(index+1)]
const combinations = re(nextarr,selectnum-1)
const attached = combinations.map((combination)=>[fixed,...combination]);
result.push(...attached);
})
return result
}
const fin = re(numbers,numbers.length)
return fin.map((el)=>el.join("")).sort((a,b)=>b-a)[0]
}
런타임 에러
다른이들의 정답
방법1
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;
}
개뻘짓했다..
문자열을 두개를 붙여서 비교할 생각조차 못했다..
문자열을 곱셈해줌으로써 숫자로 변환해줬다......
방법2
function solution(numbers) {
let answer = numbers.sort((a, b) => `${b}${a}` - `${a}${b}`).join('');
return answer[0] === '0' ? '0' : answer;
}
참조 : $
사용법
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level2. 카펫 (javascript) (0) | 2021.05.10 |
---|---|
[프로그래머스] level2. 짝지어 제거하기(javascript) (0) | 2021.05.10 |
[프로그래머스] level2. 프린터 (javascript) (0) | 2021.05.10 |
[프로그래머스] level2. JadenCase 문자열 만들기 (javascript) (0) | 2021.05.06 |
[프로그래머스] level2. N개의 최소공배수 (javascript) (0) | 2021.05.06 |