coding_test

[99클럽 4기 코테 스터디 TIL 32일차] H-Index (feat. 배열을 내림차순으로 정렬 - int)

jeri 2024. 11. 28. 18:54
반응형

1) 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

2) 내가 구현한 코드

import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int solution(int[] citations) {
        
        // 배열 정렬 (내림차순)
        Arrays.sort(citations);
        int[] reversed = IntStream.range(0, citations.length)
                .map(i -> citations[citations.length - 1 - i])
                .toArray();

        // H-Index 계산
        // => 정렬된 배열을 순회하며, 현재 값 ≥ 현재 인덱스 + 1 조건을 확인
        // => 이 조건을 만족하는 최대의 h를 찾음
        // => h보다 큰 수의 개수는 배열 내에서 현재 인덱스 이후의 원소 개수와 동일하므로 
        // => 인덱스 + 1이 h를 나타냄
        int h = 0;
        for (int i = 0; i < reversed.length; i++) {
            if (reversed[i] >= i + 1) {
                h = i + 1;
            } else {
                break;
            }
        }
        return h;
    }
}

 

정렬

        Arrays.sort(citations);
        int[] reversed = IntStream.range(0, citations.length)
                .map(i -> citations[citations.length - 1 - i])
                .toArray();

 

1) Arrays.sort(citations)

설명: citations 배열을 오름차순으로 정렬

  • 특징
    • 기본적으로 작은 값부터 큰 값으로 정렬
    • 내부적으로 Dual-Pivot Quicksort 알고리즘(기본적인 경우)을 사용
int[] citations = {3, 0, 6, 1, 5};
Arrays.sort(citations); // {0, 1, 3, 5, 6}

 

2) IntStream.range(0, citations.length)

설명: [0, 1, 2, ..., citations.length - 1]의 정수를 생성함

  • 특징
    • IntStream은 Java 8의 스트림 기능으로, 원시 타입 int를 처리하는 스트림
    • range(start, end)는 start부터 end-1까지의 정수 시퀀스를 생성
IntStream.range(0, 5).toArray(); // {0, 1, 2, 3, 4}

3) map(i -> citations[citations.length - 1 - i])

설명: 배열의 인덱스를 역순으로 매핑

  • 작동 방식
    • i는 IntStream이 생성한 인덱스 값(0, 1, 2, ...)
    • 배열의 끝부터 시작하도록 인덱스를 변환
      citations.length - 1 - i는 배열의 마지막 요소부터 첫 번째 요소로 접근하게 만듬
int[] citations = {0, 1, 3, 5, 6};
IntStream.range(0, citations.length)
         .map(i -> citations[citations.length - 1 - i])
         .toArray(); // {6, 5, 3, 1, 0}

4) toArray()

설명: 스트림을 배열로 변환

특징: 모든 변환 작업(map)이 끝난 뒤, 결과를 배열 형태로 저장

 

3) 추가 문제

미들러 - 가장 큰 바이토닉 부분 수열

https://www.acmicpc.net/problem/11054

챌린저 - 표현 가능한 이진트리

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

반응형