1. 

#include <string>
#include <vector>
using namespace std;
 
int solution(int n, vector<int> lost, vector<int> reserve) 
{
    int answer = 0;
    int student[31];
    
    // 모든 학생이 체육복 1개씩 있음
    for(int i = 1; i <= n; i++)
    {
        student[i] = 1;
    }
    
    // 체육복을 도난당한 학생의 체육복 수 -1
    for(int i = 0; i < lost.size(); i++)
    {
        student[lost[i]]--;
    }
    
    // 여벌 체육복이 있는 학생의 체육복 수 +1
    for(int i = 0; i < reserve.size(); i++)
    {
        student[reserve[i]]++;
    }
    
    for(int i = 1; i <= n; i++)
    {
        if(student[i] == 2)
        {
            // 앞 학생
            if(i != 1 && student[i-1== 0)
            {
                student[i]--;
                student[i-1= 1;
            }
            // 뒤 학생
            else if(i != n && student[i+1== 0)
            {
                student[i]--;
                student[i+1= 1;
            }   
        }
    }
    
    for(int i = 1; i <= n; i++)
    {
        if(student[i] >= 1)
        {
            answer++;
        }
    }
    
    return answer;
}
cs

 

 

2.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
int solution(int n, vector<int> lost, vector<int> reserve) 
{
    int answer = 0;
    int visited[31= {0};
    
    sort(lost.begin(), lost.end());
    sort(reserve.begin(), reserve.end());
    
    int lostIdx = 0;
    for(int i = 1; i <= n; i++)
    {
        // 잃어버린 사람 0
        if(lost[lostIdx] == i)
        {
            visited[i] = 0;
            lostIdx++;
        }
        // 잃어버리지 않은 사람 1
        else
        {
            visited[i] = 1;
        }
    }
    
    lostIdx = 0// 여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우, 빌려줄 수 없음을 고려하기 위해 필요
    int reserveIdx = 0;
    for(int i = 1; i <= n; i++)
    {
        int lostflag = 0;
        if(lost[lostIdx] == i)
        {
            lostflag = 1;    
        }   
        
        if(reserve[reserveIdx] == i)
        {
            // 여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우, 빌려줄 수 없음
            if(lost[lostIdx] == i)
            {
                visited[i] = 1;
            }
            else
            {
                if(visited[i-1== 0 && i != 1)
                {
                    visited[i-1= 1;
                }
                else if(visited[i] == 0)
                {
                    visited[i] = 1;
                }
                else if(visited[i+1== 0 && i != n)
                {
                    visited[i+1= 1;
                }    
            }
                
            reserveIdx++;
        }
        
        if(lostflag == 1)
        {
            lostIdx++;
        }
    }
    
    for(int i = 1; i <= n; i++)
    {
        if(visited[i] == 1)
        {
            answer++;
        }
    }
    
    return answer;
}
cs

+ Recent posts