Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 백준
- 프로그래머스
- 폰켓몬
- 트리맵
- 산업은행청년인턴
- BFS
- 운영체제
- 외래키제약조건위반
- CPU스케줄링
- 파이널프로젝트
- DB replication
- 컴퓨터구조
- 해시
- findById
- CS
- 프로젝트
- fatch
- springboot
- 스케일아웃
- 트리셋
- SpringBatch
- 2178
- 임베디드타입
- Spring JPA
- 산업은행it
- 구현
- JPA
- flyway
- 그래프탐색
- 코테
Archives
- Today
- Total
나 JAVA 봐라
[프로그래머스] H-Index 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제를 읽어보면, h의 최댓값을 찾는 문제이다.
또한 h가 되려면 아래 두가지 조건을 모두 만족해야한다.
1. h <= h번 이상 인용된 논문의 수
2. h >= h번 이하 인용된 논문의 수
h값을 탐색할 때, 가장 큰 인용횟수를 기준으로 시작할 수 있다. (-> 그 이상의 수는 애초에 조건을 만족할 수 없기 때문에)
따라서 배열을 정렬한 후, 가장 큰 수부터 반복하여 탐색한다.
이 때, 큰 수부터 반복하다가 조건 2가지를 모두 만족하는 h값을 찾았다면, 큰 수 부터 탐색했기에 가장 큰 값이므로 바로 return하면 된다.
++ 그리고 정렬했기 때문에, count++을 하다가 더이상 count++ 할 수 있는 원소가 없다면 break를 통해서 끝까지 탐색하지 않도록 한다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
int n = citations.length;
Arrays.sort(citations);
for (int i = citations[citations.length-1]; i >= 0; i--){
int h = i;
int count = 0;
// h번 이상 인용된 논문의 수 count하기
for (int j = citations.length-1; j >=0; j--){
if(h <= citations[j]) {
count++;
}else{
break; // 탐색 끗.
}
}
if (h <= count && h >= n-count){
return h;
}
}
return 0;
}
}