1️⃣ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
2️⃣ 풀이
import java.util.*;
class Solution {
public int solution(int[] citations) {
int n = citations.length;
// 배열 오름차순 정렬
Arrays.sort(citations);
// 작은 논문인용수 부터 검사
for(int i = 0; i < n; i++){
int h = n - i; // h = 현재 논문보다 인용수가 많은 논문 개수
if(citations[i] >= h) return h;
}
return 0;
}
}
처음에 인용수가 많은 것 부터 접근을 했지만, 오히려 코드의 직관적인 이해가 어려워서 작은 논문 인용수부터 검사하는 것으로 수정했다.
만약, 인용수가 많은 것 부터 접근을 하려면
h = i + 1
catations[n-1-i] < h 를 구하여서
조건을 만족시키지 못하는 순간을 찾아
return h - 1; 을 해준다 물론 모두 만족한다면 n이 최대 h 일 것이다.
h-index 문제를 풀며 O(nlogn)의 성능을 찾아내기위해 이렇게 접근한 것은 괜찮다고 생각했지만,
검사하는 로직을 짤 때 버벅인 부분이 있어서 조금 더 연습이 필요할 것 같다고 느꼈다.
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
(프로그래머스) n^2 배열 자르기 - 문제 풀이 및 회고 (0) | 2025.04.25 |
---|---|
슬라이딩 윈도우를 이용한 연속 부분 수열의 합 개수 구하기 (1) | 2025.04.22 |
프로그래머스 - 괄호 회전하기 문제풀이 (0) | 2025.04.01 |
프로그래머스) 카펫 문제풀이 (0) | 2025.03.06 |
프로그래머스) 달리기 경주 문제풀이 (0) | 2025.02.21 |