반응형

오늘의 학습 키워드

문제 이해

 


알고리즘 문제

 

프로그래머스

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

programmers.co.kr


공부한 내용

배열 인덱스와 값의 패턴 파악

 

Early Return


오늘의 회고

처음 시도

  • 문제를 읽었는데, 이해가 잘 안되서 여러 번 읽어봤다.
  • 그래도 감이 안잡혀서 예제를 통해 문제에 대입해서 생각해봤다.
  • 내가 생각한 문제 지문의 포인트
    • 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
    • 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return

해결

  • 지문의 예시의 [3, 0, 6, 1, 5] 배열을 정렬해보면  -> [0, 1, 3, 5, 6]
  • 해당 논문을 인용한 총 논문 횟수를 h라고 하면, h는 현재 논문의 인덱스 이상에서 인용했다는 의미. => 배열을 반복 돌면서 h는 -1 된다.
    • 배열[0] = 0 / h = 5 (논문 0, 1, 3, 5, 6)  
    • 배열[1] = 1 / h = 4 (논문 1, 3, 5, 6)
    • 배열[2] = 3 / h = 3 (논문 3, 5, 6)
    • 배열[3] = 5 / h = 2 (논문  5, 6)
    • 배열[4] = 6 / h = 1 (논문  6)
  • h의 최댓값은 배열 값이 h와 같아지거나 커졌을 때 나온다.

문제 풀이

import java.util.*;

class Solution {
    public int solution(int[] citations) {

        int answer = 0;
        Arrays.sort(citations);
        
        for (int i = 0; i < citations.length; i++) {
            //현재 논문 인용된 총 논문 개수
            int h = citations.length - i;
            
            if (citations[i] >= h) {
                answer = h;
                break;
            }
        }
        
        return answer;
    }
}

 

다른 풀이

  • early return을 사용해서 h를 바로 리턴해주고, early return에서 못 나가면 0으로 리턴하는 방식이 더 깔끔했다.
import java.util.*;

class Solution {
    public int solution(int[] citations) {

        int answer = 0;
        Arrays.sort(citations);
        
        for (int i = 0; i < citations.length; i++) {
            //현재 논문 인용된 총 논문 개수
            int h = citations.length - i;
            
            if (citations[i] >= h) {
                return h;
            }
        }
        
        return 0;
    }
}
반응형

+ Recent posts