Algorithm Problem Solving/Programmers

[프로그래머스] 코딩테스트 연습 탐욕법(Greedy) 체육복

코코자장자장 2021. 11. 29. 12:03

안녕하세요! 오늘은 프로그래머스 레벨1문제 체육복 문제를 풀어보았습니다!

 

이번에도 정렬이 들어가 알고리즘을 인클루드해서 사용했습니다!

 

흠... 이번문제는 이상하게 안풀려서 고생을 좀 했는데요! 바로 윗줄에서 말씀드린 정렬이 없어서 생긴 문제였습니다!

 

정렬이 되지 않아 최대한으로 빌릴수 있는 체육복 수가 아니였던 것으로 결론이 났습니다!

 

다들 문제 푸실때 예외상황에 대한 인지를 정렬과 관련해서 한번 더 생각하는것도 좋은 방법일 듯합니다!

 

나머지는 그냥 일반적인 문제 풀이 방법이였습니다!

 

그리고 이 문제가 그리디 알고리즘이랑 관련이 있는지 잘 모르겠네요 ㅎㅎ...(제가 초보라서 그런듯합니다 ㅠㅠ)

 


#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    
    sort(lost.begin(), lost.end());
    sort(reserve.begin(), reserve.end());
    
    int reserveArray[32] = {0,};
    int size = reserve.size();
    for (int i = 0; i < size; i++){
        reserveArray[reserve[i]] = 1;
    }
    
    size = lost.size();
    answer = n - size;
    for (int i = 0; i < size; i++){
        if(reserveArray[lost[i]] == 1) {
            reserveArray[lost[i]] = 0;
            answer+=1;
            lost[i] = -1;
        }
    }
    for (int i = 0; i < size; i++){
        if (lost[i] == -1) continue;
        if(reserveArray[lost[i]-1] == 1) {
            reserveArray[lost[i]-1] = 0;
            answer+=1;
        }
        else if(reserveArray[lost[i]+1] == 1) {
            reserveArray[lost[i]+1] = 0;
            answer+=1;
        }
    }
    
    return answer;
}