코딩테스트/프로그래머스

[프로그래머스]H-Index - Java

GAEBAL 2022. 7. 24. 17:32
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42747

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

처음엔 주어진 배열을 오름차순으로 정렬을 한 후에 이중 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