알고리즘 공부/C++

[L2] 프로그래머스 H-index C++ 완전 탐색, 브루트포스 알고리즘, DAT

마달랭 2024. 10. 19. 08:48
반응형

리뷰

처음엔 문제 이해가 잘 되지 않았는데 벡터 내에 존재하는 수가 n개 이상인 최대값을 구하는 문제로 받아들였다.

 

 

프로그래머스

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

programmers.co.kr

 

 

전역 변수

  • v : 나온 숫자의 합계를 저장해 둘 정수형 배열, 크기는 10001로 세팅한다.

 

함수

없음

 

 

문제풀이

  1. 매개변수로 주어진 citations 벡터에 존재하는 값들을 for문을 통해 모두 탐색한다.
  2. v배열의 1 ~ 현재수까지의 인덱스를 모두 1씩 증가시켜준다.
  3. len을 citations벡터의 길이로 초기화 해주고, h_index변수를 0으로 초기화 해준다.
  4. len크기로 while문을 개행하고 현재 v의 len인덱스가 len값보다 클 경우 h_index를 len으로 바꾼 후 탐색 종료
  5. 아니라면 len값을 1씩 계속 줄여나가며 탐색을 계속해준다.
  6. 최종적으로 h_index를 리턴해 준다.

 

참고 사항

0의 개수를 올려주지 않은 이유는 어차피 h_index를 0으로 초기화 할 것이기 때문이다. (기본값)

 

 

정답 코드

#include <string>
#include <vector>

using namespace std;

int v[10001];

int solution(vector<int> citations) {
    for (int i:citations) while(i) v[i--]++;
    int len = citations.size();
    
    int h_index = 0;
    while(len) {
        if (v[len] >= len) {
            h_index = len;
            break;
        }
        else len--;
    }
    
    return h_index;
}

 

 

728x90
반응형