안녕하세요

프로그래머스 JS [정렬] [3/3] 본문

프로그래머스

프로그래머스 JS [정렬] [3/3]

sakuraop 2023. 9. 3. 15:58

K번째 수 문제 보기 (5)

문제 포인트

- 1번째 부터 시작하기 때문에 i번째, k번째 인덱스를 구하려면  -1을 해주어야 합니다.

function solution(array, commands) {
    const result = []
    
    commands.forEach(([i,j,k],index) => {
        result.push(array.slice(i-1,j).sort((a,b) => a-b)[k-1])    
    })
    
   return  result
}

가장 큰 수 문제 보기 (***)

문제 포인트 sort() 활용

 - a와 b의 모양을 "ab"와 "ba" 로 만든 결과를 비교하여 조합하였을 때도 물론 대소를 비교할 수 있다.


1, 9, 19, 91를 예시로정렬 과정을 시각화해보자.


19 & 91 => 19 < 91 이므로
9, 1, 19, 91 이 된다.


1 & 19 => 119 < 191
9, 19, 1, 91 이 된다.


19 & 91 => 1991 < 9119
9, 19, 91, 1 이 된다.


19 & 91 => 1991 < 9119
9, 91, 19, 1 이 된다.


19 & 1 => 191 > 119
9, 91, 19 ,1


이렇게 두 개의 숫자끼리 조합한 형태만 대소비교 하여도 가장 큰 수의 형태를 만들 수 있다.

 

- "0000"이라는 숫자는 존재하지 않으므로 0이 여러개인 경우엔 결과를  "0" 으로 만들어주어야 한다.

const solution = (numbers) => {
  const result =
    numbers
      .map(String) // 문자열로 만들기
      .sort((a, b) => b + a - (a + b)) // "ab"와 "ba" 형태의 대소를 비교하기
      .join(""); // 문자열 형태로 만들기

    return result * 1 ===0 ? "0" : result // "000"같은 경우엔 "0" 반환하기
};

H-index Level 2 문제 보기 (5)

문제 이해가 안된다

말이 이해가 안돼서 그렇지 이해만 하면 구현은 어렵지 않다.

 

https://www.ibric.org/myboard/read.php?Board=news&id=270333 

 

[연구논문을 위한 핵심 10단계] H-지수(H-Index) 란 무엇인가?

일반적으로 특정 연구원의 연구성과를 평가하기 위해 얼마나 많은 논문을 발표 하였는지를 보게됩니다. 그러나 단순히 발표한 논문 수로만 그 연구원의 연구 업적을 평가 하기에는 발표한 논문

www.ibric.org

// 자신이 저널에 등재한 전체 논문중 많이 인용된 순으로 정렬한 후
// 피인용수가 논문수와 같아지거나,
// 피인용수가 논문수보다 작아지기 시작하는 숫자가 바로 나의 h가 됩니다.

이 말에 따르면  for문을 써서

if (인용된 수 <= i ) return i 

이렇게 구할 수 있는데, 이렇게 해 보면 틀렸다고 나온다.

 

왜냐면,

[10,10,10] 은 3편 이상 인용된 논문이 3편 이상이니 h=3 이 되어야하기 때문이다

 

아주 쉽게 말해

논문을 세린 수 보다 인용된 횟수가 더 큰 논문이 몇 개인지 찾으란 말이다.

 

이렇게 적어놨으면 이 문제 틀리는 사람도 없었을 것이다.

 

(논란의 문장)

(논란을 더 키운 예시)

function solution(citations) {
  const sorted = citations.sort((a, b) => b - a);
  let h = 0;

  for (let i = 0; i < sorted.length; i++) {
    if (sorted[i] > h) {
      h++;
    } else {
      return h;
    }
  }
}
solution([9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999]);