알고리즘/HackerRank_문제풀이

[PS]#Fraudulent Activity Notifications

코딩하는상후니 2022. 11. 13. 18:12

 


 

 

#include <bits/stdc++.h> 
using namespace std; 
vector<int> vec; 
int n, answer;

int FindLoca(int s, int e, int val) 
{ 
    int mid = (s + e) / 2; 
    if (e <= s) return mid; 
    if (vec[mid] >= val) return FindLoca(s, mid, val); 
    else if (vec[mid] < val) return FindLoca(mid + 1, e, val); 
    return mid; 
}

void PushAndSort(int delVal, int pushVal) 
{ 
    int delLocat = FindLoca(0, vec.size() - 1, delVal); 
    vec.erase(vec.begin() + delLocat); 
    int inLocat = FindLoca(0, vec.size() - 1, pushVal); 
    if (inLocat == vec.size() - 1 && vec[inLocat] < pushVal) 
    { 
        vec.push_back(pushVal); 
        return; 
    } 
    vec.insert(vec.begin() + inLocat, pushVal); 
}

int solution(vector<int> expenditure, int d) 
{ 
    n = expenditure.size(), answer = 0; 
    if (n <= d) return 0; 
    int idx = d; 
    for (int i = 0; i < d; ++i) vec.push_back(expenditure[i]); 
    sort(vec.begin(), vec.end()); 
    while (1) 
    { 
        if (d % 2 == 1) 
        { 
            if ((vec[d / 2]) * 2 <= expenditure[idx]) ++answer; 
        } 
        else if (d % 2 == 0) 
        { 
            double dd = (vec[d / 2 - 1] + vec[d / 2]) / 2.0; 
            if (dd * 2.0 <= static_cast<double>(expenditure[idx])) ++answer; 
        } 
        if (idx + 1 >= n) break; 
        PushAndSort(expenditure[idx - d], expenditure[idx]); 
        ++idx; 
    } 
    return answer; 
}
 

* 문제 풀이 과정

 
1. d 만큼 vec 추가 후 정렬.
2. d 의 짝수, 홀수 분간 후 문제의 방식대로 계산.
3. 계산 후, vec size 를 유지하며 분할 정복으로 이전 처음의 값을 찾아 지운다.
4. 마찬가지로 분할 정복으로 정렬될 위치를 찾고 삽입.
5. 끝 원소까지 반복.
 
정렬로 인한 시간 복잡도를 어떻게 줄일 수 있느냐가 핵심인 문제였다.
위치 검색 log(n) 을 구현하기 위해 분할 정복을 사용했다.
 

 

 

* 해결 과정 문제점

분할 정복 순서, 계산 방식 순서, 함수 호출 매개변수 ++idx 문제
 
 
 

* 또 다른 해결 방법

카운팅 정렬

 

 

 


 

 

'알고리즘 > HackerRank_문제풀이' 카테고리의 다른 글

[PS]#Bear and Steady Gene  (0) 2022.11.20
[PS]#Ice Cream Parlor  (0) 2022.11.20
[PS]#Gridland Metro  (0) 2022.11.17
[PS]#Hackerland Radio Transmitters  (0) 2022.11.17
[PS]#Ema's Supercomputer  (0) 2022.11.13