본문 바로가기

프로그래밍 언어/C, C++

[Hackerrank] 22. Vector-Erase

22. Vector-Erase

[ 난이도: Easy | 분야: STL ]

1. 내용 정리

N개의 정수로 이루어진 벡터가 있다고 가정하자. 그 다음, 2개의 쿼리가 주어진다.

첫 번째 쿼리에는, 벡터 내에서의 위치를 나타내는 1 개의 정수가 주어진다.

벡터의 이 위치에 있는 정수를 지워야 한다.

다음 쿼리에는 2 개의 정수가 주어지는데 벡터의 범위가 주어진다.

범위 안의 요소들은 제거해야 한다. 두 번째 쿼리는 첫 번째 쿼리가 실행된 이후에 진행된다.

아래는 유용한 벡터 함수이다.

- erase(int position);

해당하는 위치의 요소를 제거한다.

v.erase(v.begin()+4); // Erase the fifth element

- erase(int start, int end);

지정된 범위의 요소를 제거한다.

v.erase(v.begin()+2, v.begin()+5);

 

2. 과제

입력 형식

입력의 첫 번째 줄은 정수 N을 포함한다. 다음 줄은 N개의 공백으로 구분된 정수들을 가지고 있다.

세 번째 줄은 단일 정수 x를 포함하고 있는데, 이는 벡터에서 제거해아 하는 요소의 위치를 가지고 있다.

네 번째 줄은 두 정수 a와 b를 가지고 있고, 제거해야 할 요소들의 범위를 가지고 있다.

 

제약 사항

N은 1보다 크거나 같고 10^5보다 작거나 같다.

x는 1보다 크거나 같고 N보다 작거나 같다.

a는 1보다 크거나 같고 b는 a보다 크고 N보다 작거나 같다.

 

출력 형식

벡터의 크기를 첫 번째 줄에 출력하고 두 번째 줄에는 남은 벡터의 요소들을 공백으로 구분하여 출력해라.

 

입력 예시

6
1 4 6 2 8 9
2
2 4

 

출력 예시

3
1 8 9

 

설명

첫 번째 쿼리를 통해 벡터의 두 번째 요소를 제거했고, 그 수는 4이다.

그 후, 수정된 벡터는 {1 6 2 8 9}이다. 그 다음 2~4 범위의 숫자를 제거하고 싶은데 이는 2번째 3번째 수를 제거한다는 것이다.

그 이후 6과 2가 제거되어 {1 8 9}를 얻었다.

 

문제

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    return 0;
}
더보기

정답

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    int n; // number of integers
    cin >> n;
    vector<int> v;
    for(int i=0;i<n;i++) {
        int temp; // cin integer
        cin >> temp;
        v.push_back(temp);
    }
    int x; // Index of erased element
    cin >> x;
    v.erase(v.begin()+x-1);
    
    int a; int b; // Range of erased element
    cin >> a >> b;
    v.erase(v.begin()+a-1,v.begin()+b-1);
    
    int size = v.size();
    cout << size << endl;
    for(int i;i < size; i++) {
        cout << v[i] << " ";
    }
    return 0;
}

 

 

 

 

 

©️ Hackerrank. All Rights Reserved.