vector arr를 선언해주고, 모두 1로 초기화해준다.
이때 1은 체육복을 가지고있다는 의미이다.
이후 lost.size()와 reserve.size()만큼 for문을 돌려주는데,
이때 arr은 잃어버렸으면 0, 여분이 있었는데 잃어버렸으면 1(기본값도 1=즉 못빌려줌), 빌려줄 수 있는 여분이 있으면 2가 된다.
그리고 n번만큼 for문을 다시 돌리면서, 잃어버린 학생이 있으면
나눠주고 빌려준 친구는 감소시키고 빌린 친구는 증가시킨다.
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
|
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> arr(n,1);
//잃어버렸으면 0, 있으면 1, 여분 가졌으면 2
for(int i=0;i<lost.size();i++){
arr[lost[i]-1]--;
}
for(int i=0;i<reserve.size();i++){
arr[reserve[i]-1]++;
}
for(int i=0;i<n;i++){
if(arr[i]==0){
if(i>0 && arr[i-1]==2){
arr[i]++;
arr[i-1]--;
}
else if(i<n-1 && arr[i+1]==2){
arr[i]++;
arr[i+1]--;
}
}
}
for(int i=0;i<n;i++){
if(arr[i]!=0) answer++;
}
return answer;
}
|
cs |