1. ๋ฌธ์
์ ์ฒด ํ์์ ์ n,
์ฒด์ก๋ณต์ ๋๋๋นํ ํ์๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด lost,
์ฌ๋ฒ์ ์ฒด์ก๋ณต์ ๊ฐ์ ธ์จ ํ์๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด reserve๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋,
์ฒด์ก์์
์ ๋ค์ ์ ์๋ ํ์์ ์ต๋๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2. ์ฝ๋
#include <string>
#include <vector>
#include <iostream>
using namespace std;
//n : ์ ์ฒด ํ์์ ์
//lost : ์ฒด์ก๋ณต์ ๋๋๋นํ ํ์๋ค์ ๋ฒํธ ๋ฐฐ์ด
//reserve : ์ฌ๋ฒ์ ์ฒด์ก๋ณต์ ๊ฐ์ ธ์จ ํ์๋ค์ ๋ฒํธ ๋ฐฐ์ด
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
//์ ๋ค ์๋ฅผ ๋น๊ตํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ ๊ณผ์ ์ด ๊ผญ ํ์ํจ
sort(lost.begin(),lost.end());
sort(reserve.begin(),reserve.end());
//๋๊ฐ์ง ๋ฐฐ์ด์ ํตํด ๋ฒกํฐ์ ์ฝ์
,์ญ์ ๋ฅผ ์งํํ์ง ์๊ณ
//์ฒดํฌ๋ฅผ ํ๋์ง ํ์ํด์ค
bool isChecked[31]={false};
bool isCheckedReserve[31]={false};
int coverNum=0;
//๋จผ์ ๊ฐ์ ๊ฐ๋ค์ ๋ชจ๋ true๋ก ๋ณ๊ฒฝํ๊ณ ๋น๋ ค์ค์ผ๋ก์จ ๋ฉ๊ฟ์ ์๋ ์ฌ๋์๋ฅผ ์ฆ๊ฐ
for(int i=0;i<reserve.size();i++)
{
for(int j=0;j<lost.size();j++){
if(reserve[i]==lost[j]){
isChecked[j]=true;
isCheckedReserve[i]=true;
coverNum++;
}
}
}
//๊ทธ ํ ๋จ์ ๊ฒ๋ค์ ์ด์ฉํ์ฌ ์๋ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ํตํด ๋ฉ๊ฟ์ ์๋ ํ์ ์ ๊ณ์ฐ
for(int i=0;i<reserve.size();i++){
if(coverNum==lost.size())break;
for(int j=0;j<lost.size();j++){
if(isChecked[j]||isCheckedReserve[i]) continue;
else if(lost[j]-1==reserve[i]||lost[j]+1==reserve[i])
{
coverNum++;
isChecked[j]=true;
isCheckedReserve[i]=true;
}
}
}
//์ ๋ต = ์ดํ์์ - ์์ด๋ฒ๋ฆฐ ์ฒด์ก๋ณต ์ + ๋ฉ๊พผ ํ์ ์
answer = n-lost.size()+coverNum;
return answer;
}
3. ํด์ค
//n : ์ ์ฒด ํ์์ ์
//lost : ์ฒด์ก๋ณต์ ๋๋๋นํ ํ์๋ค์ ๋ฒํธ ๋ฐฐ์ด
//reserve : ์ฌ๋ฒ์ ์ฒด์ก๋ณต์ ๊ฐ์ ธ์จ ํ์๋ค์ ๋ฒํธ ๋ฐฐ์ด
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
//์ ๋ค ์๋ฅผ ๋น๊ตํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ ๊ณผ์ ์ด ๊ผญ ํ์ํจ
sort(lost.begin(),lost.end());
sort(reserve.begin(),reserve.end());
๋จผ์ ๊ฒฝ์ฐ์ ์์์ ์์ธ ์ฌํญ์ ์ ์ธํ๊ธฐ ์ํด ์ ๋ ฌ์ ์งํํด์ค๋ค. ์์ด๋ฒ๋ฆฐ ์ฌ๋๋ค๊ณผ ์ฌ๋ฒ์ ์ฒด์ก๋ณต์ ๊ฐ์ง๊ณ ์๋ ์ฌ๋๋ค์ ๋ฐฐ์ด์ ์ ๋ ฌ์ ์งํํ๋ค.
//๋๊ฐ์ง ๋ฐฐ์ด์ ํตํด ๋ฒกํฐ์ ์ฝ์
,์ญ์ ๋ฅผ ์งํํ์ง ์๊ณ
//์ฒดํฌ๋ฅผ ํ๋์ง ํ์ํด์ค
bool isChecked[31]={false};
bool isCheckedReserve[31]={false};
int coverNum=0;
//๋จผ์ ๊ฐ์ ๊ฐ๋ค์ ๋ชจ๋ true๋ก ๋ณ๊ฒฝํ๊ณ ๋น๋ ค์ค์ผ๋ก์จ ๋ฉ๊ฟ์ ์๋ ์ฌ๋์๋ฅผ ์ฆ๊ฐ
for(int i=0;i<reserve.size();i++)
{
for(int j=0;j<lost.size();j++){
if(reserve[i]==lost[j]){
isChecked[j]=true;
isCheckedReserve[i]=true;
coverNum++;
}
}
}
๊ฐ๊ฐ ์ฒดํฌ๋ฅผ ํ๋์ง ์ํ๋์ง ๊ธฐ๋กํ ๋ฐฐ์ด ๋๊ฐ๋ฅผ ์ค๋นํ๋ค. ๋ง์ฝ ์ฌ๋ฒ์ ์ด๋ฏธ ๋น๋ ค์ฃผ๊ณ , ๋์ฌ ๋ฐ์ ์ฌ๋์ ๊ฒฝ์ฐ ์ฒดํฌํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋งจ ์ฒ์ ์ฌ๋ฒ์ ์ค๋นํ ํ์์ด ์์ด๋ฒ๋ ธ์ ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌํด์ค๋ค. (reserve[i]==lost[j]) ์ด ๊ฒฝ์ฐ
//๊ทธ ํ ๋จ์ ๊ฒ๋ค์ ์ด์ฉํ์ฌ ์๋ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ํตํด ๋ฉ๊ฟ์ ์๋ ํ์ ์ ๊ณ์ฐ
for(int i=0;i<reserve.size();i++){
if(coverNum==lost.size())break;
for(int j=0;j<lost.size();j++){
if(isChecked[j]||isCheckedReserve[i]) continue;
else if(lost[j]-1==reserve[i]||lost[j]+1==reserve[i])
{
coverNum++;
isChecked[j]=true;
isCheckedReserve[i]=true;
}
}
}
//์ ๋ต = ์ดํ์์ - ์์ด๋ฒ๋ฆฐ ์ฒด์ก๋ณต ์ + ๋ฉ๊พผ ํ์ ์
answer = n-lost.size()+coverNum;
return answer;
}
๊ทธ ํ ์ฒดํฌํ์ง ์์ ๊ฐ๋ค์ ๋ค์ ์ฒดํฌํด์ค๋ค. ์ด ๊ฒฝ์ฐ ์ฌ๋ฒ์ ๊ฐ์ง๊ณ ์๋ ํ์์ id๋ฒํธ ์๋ค์ธ์ง ์๋์ง๋ฅผ ์ฒดํฌํด์ฃผ๋ฉด์ ๋ง์ฝ ์ฌ๋ฒ์ ๋น๋ ค์ฃผ๋ฉด coverNum์ ๊ฐ์ ๋์ฌ์ค๋ค. ์ด๋ coverNum์ ๋ง๊ทธ๋๋ก ์ผ๋งํผ ์์ด๋ฒ๋ฆฐ ํ์๋ค์ ๊ณต๋ฐฑ์ ๋ฉ๊ฟ์ ์๋์ง ๋ํ๋ด๋ ๋ณ์์ด๋ค.
๋ฐ๋ผ์ ์ ๋ต์ ์ดํ์์์ ์์ด๋ฒ๋ฆฐ ์ฒด์ก๋ณต ์๋ฅผ ๋นผ๊ณ ๋ฉ๊พผ ํ์ ์๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค.