<알고리즘 문제풀이&연습>/[C,C++] Hackerrank

[C++ vector] Vector-Erase

사용자 BlockDMask 2017. 7. 24. 12:36
반응형

0) 제목

  • Hackerrank의 C++ STL 카테고리의 Vector-Erase 문제입니다.

  • C++ 사용했습니다.

1) 문제설명

  • n을 입력 받고 n개의 개수 만큼 vector의 인자를 받습니다.

  • a를 입력받고 a번째 인자를 erase합니다.

  • a, b를 입력받고 범위 a~b 인자를 erase 합니다.

  • vector의 size와, 인자들을 차례로 출력합니다.

2) 풀이과정

  • erase의 두가지 쓰임새를 위한 간단한 문제입니다.

  • v.erase(iter) 처럼 파라미터를 하나 받는 경우에는 벡터의 iter 위치의 인자를 삭제 합니다.

  • v.erase(start, end) 처럼 파라미터를 두개 받는 경우에는 [start, end) 의 범위의 인자를 삭제 합니다.

  • start 이상, end 미만의 범위의 인자를 삭제 한다는 뜻입니다.

  • 그림으로 본다면 이렇습니다.

3) 함수설명

  • 주석 작성했습니다.


4) 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
 
 
int main() {
    
    int n;
    cin >> n;
    
    int x;
    vector<int> v;
    for(int i=0; i<n; i++){
        cin >> x;
        v.push_back(x);
    }
    
    int a, b;
    vector<int>::iterator iter = v.begin();
   
    //특정 위치 erase.
    cin >> a;
    iter += (a-1);
    v.erase(iter);
    
    //범위를 받아서 범위 만큼 erase.
    //erase는 v.erase(a, b) 라고 했을때, [a, b) 이다.
    //a 이상 b 미만의 범위. 이다.
    cin >> a >> b;
    iter = v.begin();
    v.erase(iter+a-1, iter+b-1);
    
    
    //출력 형태;
    cout << v.size() << endl;
    for(iter = v.begin() ; iter!= v.end() ; iter++){
        cout << *iter << " " ;
    }
    
    return 0;
}
 
cs


5) 인증


경로 : Dashboard>C++>STL>Vector-Erase

출처 : https://www.hackerrank.com/challenges/vector-erase

오늘은 vector의 두가지 erase에 대해서

예제를 찾아서

이 문제를 풀어보았습니다.



반응형