문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제풀이

체육복의 갯수를 단서로 잡고 풀이했다.

도난당한 학생의 체육복 갯수는 -1, 일반 학생의 갯수는 0, 체육복 여벌이 있는 학생은 1로 잡았다.

 

1. 학생 리스트를 만들어서 현재 학생들의 체육복 갯수 상태를 채워주었다.

2. 현재 인덱스의 값이 -1이라면, 앞 뒤를 체크하여 갯수를 조절해주었다.

 

 

 

내 코드
#include <string>
#include <vector>
#include <iostream>

using namespace std;

int student[30];

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    
    // lost의 체육복 갯수
    for (int i = 0; i < lost.size(); i++)
    {
        student[lost[i]]--;
    }
    
    // reserve 체육복 갯수
    for (int i = 0; i < reserve.size(); i++)
    {
        student[reserve[i]]++;
    }
    
    for (int i = 1; i <= n; i++)
    {
        if (student[i] == -1)
        {
            if (student[i - 1] == 1)
            {
                student[i - 1] = 0;
                student[i] = 0;
            }
            else if (student[i + 1] == 1)
            {
                student[i + 1] = 0;
                student[i] = 0;
            }
        }
        
        if (student[i] >= 0)
        {
            answer++;
        }
    }
    
    
    return answer;
}