▸ H-Index
▸ n^2 배열 자르기
출처: 프로그래머스 코딩테스트 연습 > 정렬 > H-Index
논문 n편 증, a번 이상 인용된 논문이 b편 이상이면 a 와 b중 작은 값이 hIndex 값입니다.
[10, 8, 5, 4, 3] 의 인용횟수를 가진 교수가 있다면
10번 이상 인용 횟수를 가진 논문은 1편입니다. 이때 H-Index는 1입니다.
8번 이상 인용 횟수를 가진 논문은 2편입니다. 이때 H-Index는 2입니다.
5번 이상 인용 횟수를 가진 논문은 3편입니다. 이때 H-Index는 3입니다.
4번 이상 인용 횟수를 가진 논문은 4편입니다. 이때 H-Index는 4입니다.
3번 이상 인용 횟수를 가진 논문은 5편입니다. 이때 H-Index는 3입니다.
여기서 H-Index는 4
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int solution(int[] citations) {
List<Integer> hindexList = new ArrayList<>();
for(int c : citations){
int count = over(citations, c);
int min = Math.min(c, count);
hindexList.add(min);
}
int answer = Collections.max(hindexList);
return answer;
}
public int over(int[] citations, int num){
int count = 0;
for(int n : citations){
if(num <= n){
count++;
}
}
return count;
}
}
출처: 프로그래머스 코딩테스트 연습 > 월간 코드 챌린지 시즌3 > n^2 배열 자르기
[오답 코드]
import java.util.List;
import java.util.ArrayList;
class Solution {
public List<Long> solution(int n, long left, long right) {
List<Long> answer = new ArrayList<>();
long[][] arr = new long[n][n];
long[] nums = new long[n];
List<Long> list = new ArrayList<>();
//1-n의 수가 들어간 배열 만들기
for(int i = 0; i < nums.length; i++){
nums[i] = i+1;
}
//2차원 배열 채우기
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[0].length; j++){
if(i==j){
arr[i][j] = nums[i];
}else{
int max = Math.max(i, j);
arr[i][j] = nums[max];
}
}
}
//2차원 배열을 리스트로 만들기
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[0].length; j++){
list.add(arr[i][j]);
}
}
//정답 리스트 만들기
for(long i = left; i <=right; i++){
answer.add(list.get((int)i));
}
return answer;
}
}
[수정 코드]
import java.util.List;
import java.util.ArrayList;
class Solution {
public List<Long> solution(int n, long left, long right) {
List<Long> answer = new ArrayList<>();
for (long i = left; i <= right; i++) {
long row = i / n;
long col = i % n;
long value = Math.max(row, col) + 1;
answer.add(value);
}
return answer;
}
}