Algorithm/C++ - BOJ

BOJ/백준 - 2891 카약과 강풍 C++

ㅇㅇ잉 2021. 3. 2. 22:49

1. 모든 팀이 카약을 가지고 있다고 가정하며 vector의 초기값을 1(=팀이 가진 카약 갯수)로 잡는다.

2. 카약을 잃어버린 팀은 v[tmp]--; 하여 카약을 가지고 있지 않은(=0)것으로 만들어준다.

3. 카약 여분을 더 가지고 있는 팀은 v[tmp]++;해준다.

4. for문을 돌리면서 찾아주는데, v[i]==0이면 카약을 가지고 있지 않다는 것이므로 앞팀 뒷팀을 살핀다.

이때 앞팀을 먼저 살핀다!

빌려주면 다시 카약을 가진 갯수를 적절히 설정해준다.

5. 마지막에 v[i]==0이면 참가하지 못하는 팀, result++시켜 답 출력

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 <iostream>
#include <vector>
using namespace std;
 
int main() {
    int N, S, R;
 
    cin >> N >> S >> R;
 
    vector<int> v(N+11);
 
    for (int i = 0; i < S; i++) {
        int tmp;
        cin >> tmp;
        v[tmp]--;
    }
    for (int i = 0; i < R; i++) {
        int tmp;
        cin >> tmp;
        v[tmp]++;
    }
 
    for (int i = 1; i <= N; i++) {
        if (v[i] == 0) {
            if (v[i - 1== 2) {
                v[i]++;
                v[i-1]--;
            }
            else if (v[i + 1== 2) {
                v[i + 1]--;
                v[i]++;
            }
        }
    }
 
    int result = 0;
    for (int i = 1; i <= N; i++) {
        if (v[i] == 0) result++;
    }
 
    cout << result;
 
 
    return 0;
}
cs