[Programmers] Level1 : 체육복
Question
Solution
- 0번째 학생은 없으므로 n+1만큼 배열을 선언하고 1로 초기화 한다.
- for문을 돌아 i 학생이 잃어버렸다면 -1, 여벌이 있다면 +1을 한다.
- 이제 for문을 돌아 체육복이 없는 학생을 찾고 앞뒤로 여벌이 있는지 확인하여 연산해주면 된다.
Cord
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve)
{
int answer = 0;
int uniforms[n+1];
// 초기화
for (int i = 1; i <= n; i++)
{
uniforms[i] = 1;
// 잃어버림
for (int j = 0; j < lost.size(); j++)
{
if (i == lost[j])
{
uniforms[i]--;
}
}
// 여벌
for (int k = 0; k < reserve.size(); k++)
{
if (i == reserve[k])
{
uniforms[i]++;
}
}
}
for(int i = 1; i <= n; i++)
{
// 잃어버린 학생 찾기
if (uniforms[i] == 0)
{
// 여벌 건네주기
if (i > 1 && uniforms[i-1] == 2)
{
uniforms[i]++;
uniforms[i-1]--;
}
else if (uniforms[i+1] == 2 && i < n)
{
uniforms[i]++;
uniforms[i+1]--;
}
}
// 체육복을 가진 사람 세기
if (uniforms[i] > 0)
{
answer++;
}
}
return answer;
}
- 고칠점: lost와 reserve의 idx는 순서가 학생의 번호와 일치하게 만들었으니 이를 이용하면 좀더 간략화 가능하다.