728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42747
풀이
처음엔 주어진 배열을 오름차순으로 정렬을 한 후에 이중 for문을 돌면서 h보다 높으면 count를 하나씩 해주는 방식으로 풀었는데, 그렇게 하면 정렬을 할 필요도 없이 그냥 완전 탐색을 하는 느낌?? 그래서 틀렸음 처음엔
근데 정렬을 제대로 이용한 풀이는 반복문을 한번만 돌면서 h-index를 뽑아낼 수가 있었음
정렬을 한 후에 h를 1씩 감소시키면서 배열의 값과 비교해나가면 h보다 배열의 값이 커질 떄가 있는데 그 때가 h가 최대가 되는 값임 !
왜? 어차피 정렬을 했으니까 그 뒤로는 비교를 해봤자 어차피 h보다 큰 애들이니까 !
코드를 보면 알 수 있을거임 !
코드
// 코딩테스트 연습 - 정렬 - H-Index
// https://school.programmers.co.kr/learn/courses/30/lessons/42747
package PROGRAMMERS.level2;
import java.util.Arrays;
public class Num42747_Hindex {
public static class Solution {
public int solution(int[] citations) {
int max = 0;
Arrays.sort(citations);
for (int i = 0; i < citations.length; i++) {
int h = citations.length - i;
if (citations[i] >= h) {
max = h;
break;
}
}
return max;
}
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.solution(new int[]{3, 0, 6, 1, 5}));
System.out.println(s.solution(new int[]{5, 1, 5, 5, 5, 5}));
}
}
728x90