-
[프로그래머스/JAVA] H-IndexAlgorithm/Java 2025. 1. 24. 20:39
📌 문제 요약
[ 오답 노트 ]
❌ 기존 오답 코드import java.util.*; class Solution { public int solution(int[] citations) { int answer = 0; // 1. 오름차순 정렬 Arrays.sort(citations); // 2. 반복 횟수 세는 반복문 for (int j = 0; j < citations.length; j++) { int up = 0, down = 0; if (citations[j] > j) { up++; } else if (citations[j] < j) { down++; } if (up == down) { answer++; break; } } return answer; } }
📌 기존 코드의 문제점- 문제 조건 잘못 이해
- "h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다." 이 문제의 조건을 "논문이 h편 이상인 논문의 개수 == 논문이 h번 이하 인용된 논문의 개수"로 잘못이해했다.
- 기존 문제 조건은 h의 최댓값을 찾는 것이고, 따라서 "h번 이상 인용된 논문이 h편 이상"인 조건만 충족시킨다면 나머지 조건은 자동적으로 충족하게 된다.
[ 정답 코드 & 올바른 풀이 ]
📌 올바른 풀이1회 인용(1회이상): 1,3,5,6 => 4개 (1회이하): 0,1 => 2개 -> 4편의 논문이 1회 이상 인용이므로 조건 충족x 2회 인용(2회이상): 3,5,6 => 3개 (2회이하): 0,1 => 2개 -> 3편의 논문이 2회 이상 인용이므로 조건 충족x 3회 인용(3회이상): 3,5,6 => 3개 (3회이하): 0,1,3 => 3개 -> 3편의 논문이 3회 이상 인용이므로 조건 충족o
1. "h번 이상 인용된 논문이 h편 이상"인 조건만 충족시키기
- h번 이상 인용된 논문의 수 ≥ h 조건을 정확히 반영한다.
- 이때 h는 정렬된 배열에서 citations.length - i로 계산한다.
2. 조건 만족 시 종료
- if (citations[i] >= h) 조건을 만족하는 경우 H-Index를 찾았으므로 반복문 종료
📌 정답 코드import java.util.*; class Solution { public int solution(int[] citations) { int answer = 0; // 배열 오름차순 정렬 Arrays.sort(citations); // [0, 1, 3, 5, 6] // citations[i]에서 i값을 증가시키고 논문의 수를 감소시키면서 비교 했을 때 // 인용 횟수가 논문의 수 이상이 되었을 때의 논문의 수가 H-Index가 된다 // 1회 인용(1회이상): 1,3,5,6 => 4개 // (1회이하): 0,1 => 2개 // -> 4편의 논문이 1회 이상 인용이므로 조건 충족x // 2회 인용(2회이상): 3,5,6 => 3개 // (2회이하): 0,1 => 2개 // -> 3편의 논문이 2회 이상 인용이므로 조건 충족x // 3회 인용(3회이상): 3,5,6 => 3개 // (3회이하): 0,1,3 => 3개 // -> 3편의 논문이 3회 이상 인용이므로 조건 충족o for(int i = 0; i < citations.length; i++) { // 인용된 논문 수 // 5개 -> 4개 -> 3개 -> 2개 -> 1개 순으로 int h = citations.length - i; // citations[i] 는 0 -> 1 -> 3 -> 5 -> 6 순으로 if(citations[i] >= h) { answer = h; break; } } return answer; } }
'Algorithm > Java' 카테고리의 다른 글
[프로그래머스/JAVA] [1차] 캐시 (2018 KAKAO BLIND RECRUITMENT 문제) (1) 2025.01.27 [프로그래머스/JAVA] 2016년 (1) 2025.01.27 [프로그래머스/JAVA] 행렬의 곱셈 (0) 2025.01.23 [프로그래머스/JAVA] n^2 배열 자르기 (1) 2025.01.23 [프로그래머스/JAVA] 할인행사 (2) 2025.01.22