문제

https://programmers.co.kr/learn/courses/30/lessons/42862

풀이

  • 전체 학생의 체육복 정보를 담을 별도의 공간을 생성한다. 체육복이 있는 학생은 0, 여벌의 체육복이 있는 학생은 1, 체육복을 잃어버린 학생은 -1으로 표시한다.
  • 체육복 여벌이 있다가 도난당하는 학생도 있다.
  • 예를들어, reserve = {3,5,2} 이면 3번째,5번째,2번째 학생이 체육복 여벌을 가지고 왔음을 의미 하므로, students = {0,1,1,0,1}가 된다.

코드

#include <string>
#include <vector>

using namespace std;
int students[35];
int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    for(int i = 0 ; i < reserve.size(); i++) students[reserve[i]] += 1;
    for(int i = 0 ; i < lost.size(); i++) students[lost[i]] += -1;
    for(int i = 1; i <= n; i++) {
        if(students[i] == -1) {
            if(students[i-1] ==1) {
                students[i-1] = students[i] = 0;
            }
            else if(students[i+1] == 1) {
                students[i+1] = students[i] = 0;
            }
        }
    }
    for(int i = 1; i <= n; i++) {
        if(students[i] != -1) answer++;
    }

    return answer;
}