https://programmers.co.kr/learn/courses/30/lessons/42747
문제 이해부터 설계까지 어려웠음.. (해결은 했으나 나중에 한번 더 풀어봐야할듯)
해결 방안
1. 위의 제시된 문제를 보고 일단 인용횟수를 담은 배열인 citations를 오름차순 정렬해야겠다고 생각했음
=> 정렬을 해놓으면 인용된 논문이 h편 이상인 경우를 찾으면 나머지 논문이 h번 이하 인용되어있는지 확인 안해도 되므로
2. 그리고 정렬된 citations배열을 돌면서 i일 때 가질 수 있는 가장 큰 논문 편수를 h로 정함
=> (h = citations.length-i) h편 이상이므로 해당 i번째 논문을 포함 할 수 있기 때문에
3. 해당 i번째 citations[i]가 h 이상인지 확인 후, answer = h; break;
=> 뒤로 갈수록 i가 커져 논문 편수(h)가 줄어듬으로 break; (처음 조건을 만족하는 h가 가장 최댓값)
코드
import java.util.*;
// H-Index
// 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고
// 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 H-Index
// citations: 어떤 과학자가 발표한 논문의 인용횟수를 담은 배열
class Solution {
public int solution(int[] citations) {
int answer = 0;
// 0 1 3 5 6
Arrays.sort(citations);
// n편 중 h번 이상 인용된 논문이 h편 이상 일때 h의 최댓값이 h-index
int h;
for(int i=0; i<citations.length; i++){
// i일때 가장 큰 h값(논문 편수)
h = citations.length-i;
// 논문 인용횟수가 h 이상인지 확인
if(citations[i] >= h){
answer = h;
break;
}
}
return answer;
}
}
'Development Logs > Algorithms' 카테고리의 다른 글
[JAVA] 프로그래머스 : 숫자 야구 (코딩테스트 고득점 kit > 완전탐색) (0) | 2020.07.21 |
---|---|
[JAVA] 프로그래머스 : 카펫 (코딩테스트 고득점 kit > 완전탐색) (0) | 2020.07.20 |
[JAVA] 프로그래머스 : 모의고사 (코딩테스트 고득점 kit > 완전탐색) (0) | 2020.07.20 |
[JAVA] 프로그래머스 : k번째수 (코딩테스트 고득점 kit > 정렬) (0) | 2020.07.19 |
[JAVA] 프로그래머스 : 콜라츠 추측 (0) | 2020.07.16 |