논문 검사

YEONGHUN KO·2021년 11월 29일
0

ALGORITHMS - PRACTICE

목록 보기
25/50
post-thumbnail

1. 논문 검사

주어진 array는 각각의 논문이 얼만큼 언급되어있는지 알려주고 있다. 이때 h편 이상 언급된 논문이 h편이상일때 h를 h-index라고 한다. 이때 h-index의 최대값을 구하라.

예를 들어서 array = [0,3,1,5,6] 일때 h-index는 3이다. 5는 안된다 왜냐면 5편이상 언급된 논문이 2개밖에 없기 때문이다.

2. 접근 방법

h를 0부터 하나씩 증가시키면서 citations의 index로 설정한다. h편이상 언급된 논문(citations[h])이 h와 같으면 answer에 담고 h이상이면 h를 늘리고 이하이면 break해서 빠져나간다. 만약 위와 같은 arr가 주어졌을때 진행과정은 아래와 같다.

// h    above
// 0  =>  5
// 1  =>  4
// 2  =>  3
// 3  =>  3
// 4  =>  2
function solution(citations) {
  let answer = 0;

  let hInd = 0;

  let above = 0;

  // citations.sort((a,b)=>a-b)

  while (true) {
    for (let i = 0; i < citations.length; i++) {
      if (citations[hInd] >= citations[i]) above++;
    }
    if (citations[hInd] > above) break;
    else if (citations[hInd] < above) {
      hInd++;
      above = 0;
    } else {
      answer = citations[hInd];
    }
  }

  return answer;
}

코드에 문제는 없는데 테스트케이스도 통과했는데 최종 점검에서 다 떨어졌다 ㅋㅋㅋㅋㅋ 그래서 다른 사람들 코드를 살펴보았다.

function otherSOlution(citations) {
  let sortedcitations = sort((a, b) => b - a);

  while (i + 1 <= citations[i]) {
    i++;
  }
  return i;
}

무엇을 의미하는 것일까? 일단 citations을 내림차순 정렬한다. 그런 다음 가장 많이 언급된 논문을 필두로 점점 오른쪽으로 가면서 덜 언급된 논문으로 이동한다.

그럼 i+1 이 이때까지 내가 살펴본 논문의 갯수이다. 그리고 citations[i] 는 내가 지금 살펴보고있는 논문의 언급된 수이다. 그래서 내가 살펴본 논문의 갯수가 내가지금 살펴보고있는 논문의 언급된 수보다 크거나 같으면 빠져나온다.

그래서 3+1 / citations[3] 일때는 빠져나오게 되는 것이다.

지금 보고있는 논문의 언급된 수가 1밖에 안되는데 내가 지금 검토한 논문은 4편이나 되기 때문이다. 그래서 i(3편) 는 3까지가 최대라서 i은 3이 되는 것이다.

즉 h-index는 i가 되는 것이다.

그 뒤로 가면 ciatations[i] 는 더 적어질 뿐이고 h-index는 더 커질 뿐이라서 의미없다.

아직 까지 직관적으로 이해는 안된다. 나중에 더 보면 되겠지. 오케이 끝!

그리고 내 코드의 문제점도 나중에 고쳐보자!

profile
'과연 이게 최선일까?' 끊임없이 생각하기

0개의 댓글