[프로그래머스]

프로그래머스 디펜스 게임 C++

Hevton 2023. 9. 15. 15:05
반응형

 

처음엔 시간초과가 떴었다.

왜 그런가 하니, 내가 처음에 구성했던 코드는

 

n 최대 = 1,000,000,000

enemy 최대 = 1,000,000

 

둘을 이중포문으로 구성한 코드였다.

 

 

넣고, 첨부터 검사하고

넣고, 첨부터 검사하고

 

이런식이었으니 문제가 되었다.

따라서 최소한으로 검사하는 방법을 사용하고자 최솟값을 이용했다.

 

#include <string>
#include <vector>
#include <set>

using namespace std;

int solution(int n, int k, vector<int> enemy) {
    
    multiset<int> im; // 가장 큰 정수 k개를 담고 있을 set. 무적권을 사용할 것들.
    int imSize = 0;
    
    long long totalEnemy = 0;
    
    // 잘 구성하지 않으면 1,000,000 x 500,000 = 시간초과
    
    int round; // round
    
    for(round = 0; round < enemy.size(); round++) {
        
        
        if(imSize < k) {
            im.insert(enemy[round]);
            imSize++;
        } else if( (*im.begin()) < enemy[round] ) {
            totalEnemy += (*im.begin());
            im.erase(im.begin());
            im.insert(enemy[round]);
        } else {
            totalEnemy += enemy[round];
        }
        
        if(totalEnemy > n)
            break;
    }

    return round;
}
반응형