체육복
🔍 알고리즘 분류
💡 문제 풀이
n+1만큼 학생 배열 student 생성 후 1로 초기화
lost에 있는 학생을 student에서 찾아 체육복 개수 감소
reserve에 있는 학생을 student에서 찾아 체육복 개수 증가
student 배열 순회하며 체육복 개수가 0이라면
1) 앞 학생의 체육복이 2개라면 student[i-1]--, student[i]++
2) 뒷 학생의 체육복이 2개라면 student[i+1]--, student[i]++
student에 있는 학생 중 체육복 개수가 1 이상일 때 answer++
📄 코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> student(n + 1, 1);
for (auto elem : lost) {
student[elem]--;
}
for (auto elem : reserve) {
student[elem]++;
}
for (int i = 1; i <= n; i++) {
if (student[i] == 0) {
if (i - 1 > 0 && student[i - 1] == 2) {
student[i - 1]--;
student[i]++;
continue;
}
if (i + 1 <= n && student[i + 1] == 2) {
student[i + 1]--;
student[i]++;
}
}
}
for (int i = 1; i <= n; i++) {
if (student[i] > 0) answer++;
}
return answer;
}