본문 바로가기

코딩 테스트/프로그래머스

[Level 1, C++] 체육복

728x90
반응형

 

진짜 까다로웠던 문제였다.

내 방식대로 도저히 답이 안나와서 같은 과 형에게 알고리즘을 물어보고 나니까 풀 수 있었던 문제다.

 


#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);

    // studnet 배열에 각 학생의 번호와 체육복 갯수를 초기화
    for (int i = 0; i < lost.size(); i++)
    {
        student[lost[i] - 1]--;
    }

    for (int i = 0; i < reserve.size(); i++)
    {
        student[reserve[i] - 1]++;
    }

    for (int i = 0; i < n; i++)
    {
        if (student[i] == 2 && student[i - 1] == 0 && i >= 1)
        {
            student[i]--;
            student[i - 1]++;
        }
        if (student[i] == 2 && student[i + 1] == 0 && i <= n)
        {
            student[i]--;
            student[i + 1]++;
        }
    }

    for (int i = 0; i < student.size(); i++)
    {
        if (student[i] >= 1)
        {
            answer++;
        }
    }

    return answer;
}
728x90
반응형