Programmers 42862 체육복
in Algorithm
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42862
나의 풀이
- 초기에 학생들에게 각각 한벌의 체육복만 있다고 생각하여 state의 값을 1로 채운다.
- 도난 당한 학생들의 state 값을 1씩 빼준다.
- 여벌의 체육복을 가져온 학생들의 state 값을 1씩 더해준다.
- 체육복이 2벌 있는 학생들은 자신의 앞 번호부터 옷을 빌려준다.
풀이 코드 : 42862 체육복
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> state(n+1, 1);
for(int i=0;i<lost.size();i++){
state[lost[i]]--;
}
for(int i=0;i<reserve.size();i++){
state[reserve[i]]++;
}
for(int i=1;i<=n;i++){
if(state[i] == 2){
if(state[i-1] == 0){
state[i-1]++;
state[i]--;
}
else if(state[i+1] == 0){
state[i+1]++;
state[i]--;
}
}
}
for(int i=1;i<=n;i++) if(state[i] >= 1) answer++;
return answer;
}