알고리즘&자료구조/문제

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

Nakuri 2023. 9. 16. 21:38
728x90

개요

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

체감 난이도 BOJ기준 B1 정도 . . ?

 

본문

그리디로 풀었다.

여벌의 체육복을 가진 학생이 인접해있으면 누적해서 빌려줄 수 있을 것이라고 생각했는데, 그런것도 없어서 엄청 간단했다.

 

코드

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    // 1 ~ n
    vector<int> student(n+2);
    
    for(size_t i=1; i<=n; i++)
        student[i] = 1;
    for(size_t i : lost)
        student[i]--;
    for(size_t i : reserve)
        student[i]++;
    
    for(size_t i=1; i<=n; i++)
    {
        if(student[i] == 0)
        {
            for(int nIdx = i-1 ; nIdx <= i+1; nIdx+=2)
            {
                if(student[nIdx] > 1)
                {
                    student[nIdx]--;
                    student[i]++;
                    break;
                }    
            }
        }
        
        if(student[i]>0) answer++;
    }
    return answer;
}