Algorithm/프로그래머스

[프로그래머스/C++] 체육복

pinevienna 2021. 2. 8. 00:04

 

 

여분의 체육복이 있는 학생들이 체육복을 잃어버린 학생들에게 빌려주는데..

번호 앞, 뒷사람만 서로 빌려줄 수 있다고 한다

몇 명의 학생이 체육복을 입을 수 있는지 return하는 문제

 

 

여분이 있는 학생들이 체육복을 도난당하면 빌려줄 수 없기 때문에 그것까지 체크해야 했다

벡터를 하나 만들어서 거기에 디폴트 값으로 1을 주고, 잃어버린 애들은 -1 여분이 있는 애들은 +1을 해준다

그리고 그 벡터를 첨부터 탐색하면서.. 서로 사이좋게 나눠주면 된다

 

 

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
#include <string>
#include <vector>
 
using namespace std;
 
int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    vector<int> v(n, 1);
 
    for (int i = 0; i < lost.size(); i++) { v[lost[i] - 1]--; }
    for (int i = 0; i < reserve.size(); i++) { v[reserve[i] - 1]++; }
 
    for (int i = 0; i < v.size(); i++) {
        if (v[i] == 0) {
            if (i != 0 && v[i - 1== 2) {
                v[i - 1]--;
                v[i]++;
            }
            else if (i != v.size() - 1 && v[i + 1== 2) {
                v[i + 1]--;
                v[i]++;
            }
        }
    }
 
    for (int i = 0; i < v.size(); i++) { if (v[i] != 0) answer++; }
 
    return answer;
}
cs