할머니의 콤퓨타 도전기

Javascript로 프로그래머스 정렬 문제 풀기 본문

Algorithm/Problem Solving

Javascript로 프로그래머스 정렬 문제 풀기

ji.o.n.e 2021. 6. 25. 17:21

오늘은 자바스크립트로 프로그래머스 고득점 kit 정렬 문제를 풀어보았습니당

 

 

1. k번째수 (Level1)

https://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

  • 코드 구현
    • sort 메서드는 인자로 compareFunction을 받는다.
      • compareFunction은 정렬 순서를 정의하는 함수이다.
      • 이를 생략하면 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬된다.
      • 그래서 이 문제에서 정렬을 array.sort()로만 해주게 되면, 10은 2보다 작은 값으로 취급된다.(앞 글자로 비교하기 때문)
      • 따라서 compareFunction을 아래와 같이 따로 정의해줘야한다!
    • slice(begin, end)
      • begin: 잘라낼 바열의 시작 index
      • end: 잘라낼 배열의 종료 index. 이 값은 배열에 포함되지 않는다
      • 잘라낸 원소들로 만든 새로운 배열을 리턴한다.
function solution(array, commands) {
    let answer = [];
    commands.forEach((command) => {
        let i = command[0];
        let j = command[1];
        let k = command[2];
        let sub_array = array.slice(i-1, j);
        sub_array.sort((a,b)=> a-b);
        answer.push(sub_array[k-1]);
    })
    return answer;
}

 

 

2. 가장 큰 수 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/42746

 

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

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

programmers.co.kr

function solution(numbers) {
    let answer = numbers.map((number) => number.toString()).sort((a,b) => (b+a) - (a+b)).join("");
    return answer.replace(/^0+/, "0");
}

 

 

3. H-Index (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/42747?language=javascript

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

  • 풀이 설명
    • 우선 인용 횟수를 오름차순 정렬한다.
    • 가능한 h의 최대값은 논문의 수 이므로 이를 하나씩 줄여가면서 h번 이상 인용된 논문이 h 편 이상인지 체크한다.
  • 코드 구현
    • 인용 횟수를 오름차순으로 정렬했기에 citations.length-i 인덱스 위치의 인용 횟수가 i보다 크면 i번 이상 인용되었다고 볼 수 있다.
    • 코드 자체는 c++로 풀었을 때랑 다른게 없다.
function solution(citations) {
    let answer = 0;
    
    citations.sort((a,b) => a-b);
    
    for(let i=citations.length; i>0; i--){
        if(citations[citations.length-i] >= i){
            answer = i;
            break;
        }
    }
    return answer;
}

 

Comments