[C++]프로그래머스 체육복

less than 1 minute read

문제는 다음과 같다.

오늘은 프로그래머스 체육복 문제를 풀어보도록 하자. Level 1 문제로 오랜만에 Greedy문제를 풀다보니 초반에 좀 멍했다. 아무래도 요즘 알고리즘 공부를 안 한 벌을 받고 있는 것 같다. ㅠㅠ.. 항상 많이 하려고 하지 말고 꾸준히 조금씩 한다는 마인드로 해야겠다. : )

여튼! 위 문제는 체육복을 도난당한 친구들을 구제해주는 문제이다. 아래 주석을 참고하자 ! 어렵지 않다 !

                                     [코드]
#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer=0;
    //n명의 체육복 갯수를 1로 세팅
    vector<int> student_clothes(n, 1);
    //여분의 체육복을 가진 학생들 +1씩 해줌
    for(int i=0;i<reserve.size();i++){
        student_clothes[reserve[i]-1]++;
    }
    //도난당한 학생들은 -1씩해줌
    for(int i=0;i<lost.size();i++){
        student_clothes[lost[i]-1]--;
    }
    //n번을 돌면서
    for(int i=0;i<n;i++){
        //만일 체육복이 없고 앞 친구는 2벌이면, 본인 +1/앞 친구-1
        if(i>0 && student_clothes[i] == 0 && student_clothes[i-1] == 2){
            student_clothes[i]++;
            student_clothes[i-1]--;
        }
        //만일 체육복이 없고 뒷 친구는 2벌이면, 본인 +1/뒷 친구 -1
        else if(i<n-1 && student_clothes[i] == 0 && student_clothes[i+1] == 2){
            student_clothes[i]++;
            student_clothes[i+1]--;
        }
    }
    //0벌인 친구들 제외한 명수 구하기
    for(int i=0;i<n;i++){
        if(student_clothes[i] != 0)answer++;
    }
    return answer;
}