Programmers/Level 1
[프로그래머스 1] 체육복 (C/C++)
워니-
2019. 10. 16. 22:58
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 |