🔎 문제
🧩 구현과정 및 코드
개인 토글 영역에 구현 과정과 코드를 자유롭게 작성해주시면 됩니다.
사용할 데이터 구조와 풀이 방향성
적용할 알고리즘 혹은 메서드
수영
구현
- citations 내림차순 정렬
- 인용 횟수(citation)가 논문의 수(i+1)보다 큰 경우를 filter하면 배열이 나오는데 그 배열의 개수가 HIndex가 된다.
코드
첫 코드(전체 통과)
- h 이상 인용된 논문 개수를 구한 배열(counts)
- hIndex를 구한 배열(hIndex)
- Math.max로 인덱스 반환
- 기존에는 sort로 내림차순 정렬해서 첫 번째 인덱스 반환했으나 더 느려서 수정
function solution(citations) { const n = citations.length // h 이상 인용된 논문 개수 구하기 // [3, 6, 5] 3 const counts = citations.map(h => { return citations.filter((citation) => citation >= h).length }) // hIndex 구하기 const hIndex = counts.map((count, i) => { return count <= citations[i] && (n - count) <= citations[i] ? count : 0 }) // 최댓값 반환 return Math.max(...hIndex) }
테스트 결과
- 역전된 순간에서 나머지 논문은 어차피 이하이므로 볼 필요가 없다.
- hIndex.sort() 테스트 결과 (41.26ms, 38.3MB)
- Math.max(…hIndex) 테스트 결과 (34.10ms, 36.7MB)
- 밑줄 친 부분이 아직 이해가 안된다. 처음에 >=생각했다.
- h번 이상 인용된 논문(count)이 h편 이상(citations[i])이고
- 팀원과 코드 리뷰 후 문제 다시 이해
- 정렬과 i+1을 비교해서 같거나 역전되는 순간이 최댓값이다. ❌ → 역전된 순간도 최댓값이 아니다. 이 것은 h가 3일 때 논문 수도 3일 때의 경우이고, [9, 5, 2, 1, 0]과 같을 때는 정답으로 2가 아니라 3이 나오므로 실패한다.
- 역전된 순간에서 나머지 논문은 어차피 이하이므로 볼 필요가 없다. ⭕
두 번째 코드(전체 통과)
- 팀원 분들의 코드를 보고 문제를 다시 이해했다.
- 기존 코드와 다른 점: 내림차순 정렬, hIndex를 따로 구하지 않는다.
- 테스트 케이스 추가: [3, 0, 6, 1, 5] 3 말고, h와 i+1이 숫자가 다른 경우를 체크하고 싶어서 추가했다.
// 인용된 수(h) : 65310 95210 // 논문의 수(i+1) : 12345 12345 // h >= i+1에 부합하는 h의 개수를 구하면 각각 [6, 5, 3] -> 3, [9, 5] -> 2가 나온다. function solution(citations) { // 내림차순 정렬 citations = citations.sort((a, b) => b - a) return citations.filter((citation, i) => citation >= i + 1).length }
정은
종혁
구현
코드
function solution(citations) { //전체 길이가 h의 최댓값 let answer = 0; citations.sort((a,b)=>{ return b-a; }); const {length} = citations for(let i=0 ; i<length; i) { if(i<citations[i]) {//인용된 수가 현재 논문의 수보다 작아지면 끝 answer ++ ; } } return answer; } function solution(citations) { const length = citations.length //h 인용수 let result = 0 for(let h=0;h<=length;h++){ let 인용횟수 = 0 citations.forEach((copy,index)=>{ if(copy >= h){ 인용횟수 ++}}) let 안인용횟수 = length - 인용횟수 if(인용횟수 >= h && 안인용횟수 <= h){ result = h } } return result } 인용 인용X h 5 0 0 4 1 1 3 2 2 3 2 3 2 3 4 2 3 5
재웅
✏️ 후기
문제를 풀고 느낀 점, 막혔던 부분 혹은 개선 사항 등을 자유롭게 작성해주시면 됩니다.
수영
- 문제 이해를 제대로 못해서 더 어렵게 접근했던 것 같다.
- 팀원 분들의 코드가 문제를 이해하는 데 도움이 됐다.
정은
- 테스트 한개는 눈치껏 맞추게 되었다(선 통과 후 이해)
종혁
- 인용된 횟수들이 중요한게 아니라, 논문의 개수로 접근해야 되는것 같다
재웅