Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- JPA
- 넥사크로
- aws
- 스프링
- Eclipse
- 코틀린
- 쿼리
- 시큐리티
- JavaScript
- Spring
- kotlin
- GitHub
- 오라클
- 방법
- db
- 알고리즘
- jquery
- Security
- 프로그래머스
- error
- Git
- 함수
- 생성
- Java
- mybatis
- IntelliJ
- 자바
- 에러
- Vue
- oracle
Archives
- Today
- Total
송민준의 개발노트
프로그래머스 HIndex 본문
programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스 HIndex
문제 이해가 제일 중요하고 규칙을 찾아내야 하는 문제이다.
문제의 핵심이 아래 문장이다.
"n편 중 h번 이상 인용된 논문이 h편 이상 나머지 논문이 h번 이하 인용"
우선 주어진 배열을 내림차순으로 정렬했다.
그러면 아래 표와 같이 구성이 되는데
H값이 배열의 값보다 작거나 같을 때까지 만족을 한다.
그럼 인덱스 3의 경우 H값이 배열의 값보다 크게 되니 false가 되고
h는 3이 된다.
인덱스 | 0 | 1 | 2 | 3 | 4 |
값 | 6 | 5 | 3 | 1 | 0 |
H값 | 1 | 2 | 3 | 4 | 5 |
코드로 표현 하면 아래와 같다.
import java.util.Arrays;
import java.util.Comparator;
public class Hindex {
public int solution(int[] citations) {
int h = 0;
Integer[] arr = Arrays.stream(citations)
.boxed()
.toArray(Integer[]::new);
Arrays.sort(arr, Comparator.reverseOrder());
for(int i = 0; i < arr.length; i++) {
h++;
if(h > arr[i]) {
break;
}
if(i == arr.length-1) {
h++;
}
}
return --h;
}
}
먼저 내림차순으로 정렬
Integer[] arr = Arrays.stream(citations)
.boxed()
.toArray(Integer[]::new);
Arrays.sort(arr, Comparator.reverseOrder());
배열을 for문으로 돌려서 h값 체크
여기서 arr.length-1 이 i와 같은 경우를 체크한 것은 마지막까지 for문이 돌았을 경우 h값을 더해주기 위한 것인데
그 이유는 마지막 리턴값이 --h 이기 때문이다.
--h가 들어간 이유는 인덱스를 돌면서 h값을 먼저 + 해주기 때문에 완벽하게 안돌았을 경우 -1을 해준 것이다.
for(int i = 0; i < arr.length; i++) {
h++;
if(h > arr[i]) {
break;
}
if(i == arr.length-1) {
h++;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 조이스틱 (0) | 2021.02.15 |
---|---|
가장 큰 수 (0) | 2021.02.13 |
프로그래머스 큰 수 만들기 (0) | 2021.02.04 |
프로그래머스 다리를 지나는 트럭 (0) | 2021.02.03 |
프로그래머스 두 개 뽑아서 더하기 (0) | 2021.01.31 |