알고리즘

프로그래머스 JS | H-index

2022. 11. 5. 01:41
목차
  1. ❌ Solution ( 정확성 6.3 / 100 )
  2. ✅ Solution
  3. 💡❓
  4. 💡✅
출처 : 프로그래머스 - 코딩테스트 연습 - 정렬 - H-index

❌ Solution ( 정확성 6.3 / 100 )

function solution(citations) {
    let answer = 0;
    const newArr = citations.sort((a,b) => b-a);
    
    for(let i = 0; i < newArr.length; i++) {
        let count = 0;    
        const standard = newArr[i];
        newArr.forEach(function(el) {
            if(el >= standard) count++; 
        })
        
        if( standard >= count ) answer = standard;
    }
    return answer;
}

1. h의 최댓값을 찾기 위해 논문을 인용된 횟수 순으로 내림차순 정렬한 newArr 배열을 선언한다.

2. 인용된 횟수 순으로 내림차순 정렬된 newArr의 원소를 처음부터 반복문으로 돌면서 해당 논문의 인용횟수 이상 인용된 요소가 있다면 count를 1 더한다.

3.반복문이 끝나고 타겟이 되는 논문의 인용횟수 standard보다 standard 인용횟수 이상의 논문 갯수 count가 크다면 count를 return 한다. ( standard 값 === h번, h번 이상 인용된 논문 === count 이므로)

 

위 로직이 틀린 이유는 아래 입출력 예시를 조급 변형하여 3번 이상 인용된 논문이 하나 더 있다고 가정해보면 확인할 수 있다. 

주어진 논문 배열이 [6, 5, 3, 3, 1, 0]과 같이 3번 인용된 논문이 하나 더 있다면 count 값은 3이 아니라 4가 된다.

standard count
6 1
5 2
3 4
1 5
0 6

이런 경우 standard 는 3, count 는 4이므로 standard >= count 조건을 만족하지 않기 때문에 h값이 최댓값인 3이 아니라 standard >= count 조건을 만족하는 standard 값 5가 출력되므로 오답이 된다. 

✅ Solution

위에 오답 풀이가 아무리 생각해도 논리적으로 이상이 없다고 생각되었는데, 계속 오답에 정확도가 너무 떨어져서 고민 하다가 내림차순 정렬한 배열의 반복문 내부의 마지막 if 문에서 answer = standard 대신 answer = count 로 수정 하였더니 정답이었다.

function solution(citations) {
    let answer = 0;
    const newArr = citations.sort((a,b) => b-a);
    
    for(let i = 0; i < newArr.length; i++) {
        let count = 0;    
        const standard = newArr[i];
        newArr.forEach(function(el) {
            if(el >= standard) count++; 
        })
        
        if(standard >= count) answer = count;
    }
    return answer;
}

💡❓

위에서 틀린 예시와 비교해 보았을 때, 값이 h 값의 최댓값인 3이 아니라 2가 출력되므로 오답이 되어야 했다. 하지만 정답이 된걸로 봐서는 내가 문제를 잘못 이해한 것 같은데, 어디서부터 잘못 이해했는지 잘 모르겠다. 

💡✅

h index, 허쉬 지표는 연구자의 모든 논문 중 h회 이상 인용된 논문이 h개 이상일 때, 이 둘을 동시에 만족하는 h의 최대값이다.

논문의 인용횟수를 하나씩 돌면서 h 회 이상 인용된 논문이 h개보다 같거나 클때를 구해주면 되므로, 인용된 횟수를 횟수별로 확인하여 인용된 횟수보다 더 큰 숫자를 가진 논문들의 갯수의 최대값을 구하면 되는 문제였다. 

function solution(citations) {
    const newArr = citations.sort((a,b) => b-a);
    
    let i = 0;
    while (i + 1 <= newArr[i]) {
        i++;
    }
    
    return i;
  }
참고
- https://en.wikipedia.org/wiki/H-index
- https://www.youtube.com/watch?v=dAeOI0mfijE&t=60
- https://haesoo9410.tistory.com/310
- https://taesung1993.tistory.com/39

'알고리즘' 카테고리의 다른 글

프로그래머스 JS | 소수찾기(완전탐색)  (0) 2022.11.06
프로그래머스 JS | 올바른 괄호  (0) 2022.11.05
프로그래머스JS | [1차] 뉴스 클러스터링  (0) 2022.07.29
프로그래머스 JS | 괄호변환  (0) 2022.07.28
백준 JS | 11729번 하노이 탑 이동 순서  (0) 2022.07.07
  1. ❌ Solution ( 정확성 6.3 / 100 )
  2. ✅ Solution
  3. 💡❓
  4. 💡✅
'알고리즘' 카테고리의 다른 글
  • 프로그래머스 JS | 소수찾기(완전탐색)
  • 프로그래머스 JS | 올바른 괄호
  • 프로그래머스JS | [1차] 뉴스 클러스터링
  • 프로그래머스 JS | 괄호변환
3jun
3jun
3jun3jun 님의 블로그입니다.
3jun
3jun
3jun
전체
오늘
어제
  • 분류 전체보기 (94)
    • 프로젝트 (5)
    • Web (9)
    • JavaScript (19)
    • React (12)
    • 알고리즘 (31)
    • Git (3)
    • AWS (3)
    • TypeScript (3)
    • CS (2)
    • Error (6)
    • 회고 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 js
  • 자바스크립트
  • JavaScript
  • outer environment
  • 백준 코테
  • 백준 온라인저지
  • 프로그래머스 코딩테스트 js
  • react
  • 백준 알고리즘
  • 프로그래머스 코테
  • airbnb style guide
  • msw
  • this.props.history.push
  • 유효성 로직
  • 백준js
  • state
  • Promise
  • 프로그래머스 js
  • 프로그래머스 코딩테스트
  • msw 에러

최근 댓글

최근 글

hELLO · Designed By 정상우.
3jun
프로그래머스 JS | H-index
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.