본문 바로가기

알고리즘 문제풀이

[프로그래머스] 고득점 키트 - 정렬1,2

오늘 푼 문제

 

 

1. K번째 수 / Lv.1 / 시간 : 8분

programmers.co.kr/learn/courses/30/lessons/42748?language=javascript

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

function solution(array, commands) {
    const answer = commands.map(arr=>{
        let [start, end, index] = arr;
        return array.slice(start-1,end).sort((a,b)=>a-b)[index-1];
    })
    return answer;
}

 

 

2. 가장 큰 수 / Lv.2 / 시간 : 41분 (타임오버)

programmers.co.kr/learn/courses/30/lessons/42746?language=javascript

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

// function solution(numbers) {
//     var answer = '';
//    
//     let sorted = numbers.sort((a,b)=>{
//         const x = (''+a+b)*1;
//         const y = (''+b+a)*1;
//         return y-x;
//     })
//    
//     answer = sorted.reduce((acc,cur)=>{
//         return acc+cur;
//     },'');
//
//     return answer[0]==='0'? '0' : answer;
// } 

function solution(numbers) {
    var answer = '';
    
    answer = numbers.map(k=>k+"").sort((a,b)=>{
        return (b+a)*1 - (a+b)*1;
    }).reduce((acc,cur)=>{
        acc+=cur;
        return acc;
    },"");

    return answer[0]==='0'?'0':answer;
}

 

헤맸던 부분 

 1. sort의 compare func 구조 어떻게 자릿수 비교를 할지 고민했는데 그냥 둘이 합쳐보고 비교하면 굳이 자릿수 하나하나 비교 안 해도 됨.

2. 테스트 케이스 11번만 계속 오류가 났는데 [0,0,0,0] 이런식으로 모두 0이 주어졌을 때 '0'이 아닌, '0000'이 리턴되는게 문제였다.

 


노트

1. array.slice(start,end) 

 - 원본배열 유지. 

 - start 인덱스는 포함, end 인덱스는 불포함

 

2. 비구조화 할당 배열에도 적용 가능

 - let arr = [4,2,3] 일 때, let [a,b,c] = arr // 결과 :  a=4, b=2, c=3