ALGORITHM

[c++] 체육복 (Greedy)

느리님 2021. 5. 14. 10:29

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

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    int student[31];
    
    for (int i=0; i<n+1; i++) {
        student[i] = 1;
    }
    
    for (int i=0; i<(int)reserve.size(); i++) {
        student[reserve[i]]++;
    }
    for (int i=0; i<(int)lost.size(); i++) {
        student[lost[i]]--;
    }
    
    for (int i=1; i<=n; i++) {
        if (student[i] == 0) {
            if (i == 0 && student[i+1] == 2) {
                student[i]++;
                student[i+1]--;
            }
            else if (student[i-1] == 2) {
                student[i]++;
                student[i-1]--;
            }
            else if (i == n-1 && student[i-1] == 2) {
                student[i]++;
                student[i-1]--;
            }
            else if (student[i+1] == 2) {
                student[i]++;
                student[i+1]--;
            }
        }
    }
    
    for (int i=1; i<=n; i++) {
        if (student[i] != 0) {
            answer++;
        }
    }
    
    return answer;
}

 

ㅋㅋ... 프로그래머스는 2번째를 진짜 2번째라고 한다는 것을..

2번째를 0번째 부터 시작해서 자꾸 틀렸다.. ㅠㅠ 

쉬운 문제라고 해도 문제 예시를 잘 살펴보자