Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제
문제 내용
https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java
풀이
나의 풀이
- 단순하게 논문의 인용 값을 카운팅한 다음 answer 값과 비교하여 풀이했다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
// N편 중 H번이상 인용된 논문이 H편 이상일 때 최댓값이 H-INDEX 값
int answer = 1;
int cnt;
// 1. 논문의 인용 값을 카운팅
// 비교하는 answer 값이 계속 달라지기 때문에 cnt 값도 반복할 때마다 0으로 초기화
// 2. 카운팅 값과 H 값을 비교 -> 두 가지의 경우의 수가 나옴.
// 카운팅한 값보다 크거나 같은 경우의 수 -> answer++
// 카운팅한 값보다 작은 경우의 수 -> answer-- 후 break
while(true) {
cnt = 0;
for(int c : citations)
if(c>=answer) cnt++;
if(cnt >= answer) {
answer++;
}
else {
answer--;
break;
}
}
return answer;
}
}
다른 사람의 풀이
- 주어진 논문의 인용 횟수 배열을 오름차순으로 정렬한다.
- 주어진 논문의 인용 횟수 배열의 길이가 논문의 수이므로, 논문의 수를 1씩 가감하며 반복한다.
이때, ( 해당 요소의 논문 인용 횟수 >= h회이상 인용된 논문 개수)인 경우 더 이상 h-index 값이 늘 수 없으므로 체크하지 않는다.
여기서 h회이상 인용된 논문 개수는 오름차순 정렬했을 때 해당 요소부터 마지막 요소까지의 개수(=citations[i])를 의미한다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations); // 오름차순 정렬
// citations의 길이에서 1씩 가감 반복
for(int i = citations.length - 1; i >= 0; i--) {
// 이때 citations.length - i는 논문의 개수를 뜻하고 citations[i]는 논문의 인용 횟수를 뜻한다.
// 즉, 논문의 개수가 논문의 인용 횟수보다 큰 경우 break 한다.
if(citations.length - i >= citations[i]) break;
answer++;
}
return answer;
}
}
'Dev > PS' 카테고리의 다른 글
[프로그래머스-코딩테스트 연습] 모의고사 (0) | 2023.12.08 |
---|---|
[프로그래머스-코딩테스트 연습] 최소직사각형 (1) | 2023.12.08 |
[프로그래머스-코딩테스트 연습] 가장 큰 수 (0) | 2023.12.07 |
[프로그래머스-코딩테스트 연습] K번째수 (0) | 2023.12.07 |
[프로그래머스-코딩테스트 연습] 이중우선순위큐 (0) | 2023.12.07 |