Algorithm/C++ - 프로그래머스

프로그래머스 - 체육복 C++

ㅇㅇ잉 2021. 2. 17. 01:15

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