티스토리 뷰

내림차순으로 정렬하면
6 5 3 1 0
6부터 점검한다.
6 1 X
h=6번 이상 인용된 논문 : 1편. h=6보다 작으므로 아님
5 2 X
h=5번 이상 인용된 논문 : 2편. h=5보다 작으므로 아님
3 3 O
h=3번 이상 인용된 논문 : 3편. h=3보다 크거나 같으므로 h-index
1 4 O
0 5 O
보면 index+1의 값이 곧 인용논문의 수가 된다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool cmp(int a, int b) {
    return a>b;
}

int solution(vector<int> citations) {
    int answer = 0;
    sort(citations.begin(),citations.end(),cmp);
    
    for(int i = 0; i < citations.size(); i++) {
        if(citations[i] <= i+1)
            return citations[i];
    }
    return 0;
}

첫 코드는 이러하였다.

뿌앵...

예제가 하나뿐이기 때문에 놓친 게 많을거라 생각했다.
떠올린 반례는 위의 예제에서 3대신 4를 넣은 경우였다.
6 1
5 2
4 3
1 4
0 5
의 경우에서 1을 반환하게 된다. 이 문제를 해결하기 위해, 조건문을 하나 추가했다.

  
    for(int i = 0; i < citations.size(); i++) {
        if(citations[i] == i+1)
            return i+1;
        else if(citations[i] < i+1) {
            return i;

그러나 테스트 9에서 하나 실패가 뜬다 ㅠㅠ
이건 그냥 반례 제시해주는거 찾아봤는데 [4, 4, 4] 값을 넣고 돌려보라고 하더라.
이 경우의 답은 3이어야 한다. 그러나 내가 짠 코드에서는 반복문을 다 돌고 그대로 탈출하기 때문에 0이 반환되고 있었다.
코드를 좀 개편할 필요를 느꼈다.

int solution(vector<int> citations) {
    int answer = 0;
    sort(citations.begin(),citations.end(),cmp);
    
    for(int i = citations[0]; i > 0; i--) {
        answer = 0;
        for(int ele : citations) {
            if(ele < i)
                break;
            else
                answer++;
        }
        if(answer == i)
            return answer;
    }
    return 0;
}

아예 반복문에서 1씩 감소시키면서 모든 값을 검사토록 했다. 6, 5, 3, 1, 0 이렇게 검사하지 않고 6,5,4,3,2,1 이렇게 h-index가 되는지 검사했다.
이러니까 테스트케이스 11이 틀린다 ㅠㅠ 어흑
참지못하고 찾아보니ㅏ [1,1,0]을 검사해보라고 한다. 사실 이쯤부터는 그냥 반례를 해결하기 위한 코딩을 한 기분이다;

int solution(vector<int> citations) {
    sort(citations.begin(),citations.end(),cmp);
    
    for(int i = citations[0]; i > 0; i--) {
        int ref = 0;
        for(int ele : citations) {
            if(ele < i)
                break;
            else
                ref++;
        }
        if(ref >= i)
            return i;
    }
    return 0;
}

이렇게 해결할 수 있었다.

'■ 알고리즘 > ◻ Programmers' 카테고리의 다른 글

[C++] 모의고사  (0) 2022.11.11
[C++]최소직사각형  (0) 2022.11.10
[C++]가장 큰 수  (0) 2022.11.09
[C++] K번째수  (0) 2022.11.09
[C++] 위장  (0) 2022.11.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함