[프로그래머스/C++] 체육복
1.문제 링크
2. 풀이 전 계획과 생각
- 정렬
3. 풀이
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
answer += (n-lost.size());
// 오름차순 정렬
sort(lost.begin(), lost.end());
sort(reserve.begin(), reserve.end());
// 여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우 고려
for(int i=0;i<lost.size();i++){
for(int j=0;j<reserve.size();j++){
if(lost[i]==reserve[j]){
answer++;
reserve.erase(reserve.begin()+j);
lost[i]=-1;
break;
}
}
}
// 여벌 옷을 가진 학생이 도난당한 학생에게 체육복 빌려주기
for(int i=0;i<lost.size();i++){
if(lost[i]!=-1){
for(int j=0;j<reserve.size();j++){
if(abs(lost[i]-reserve[j])==1){
answer++;
reserve.erase(reserve.begin()+j);
break;
}
}
}
}
return answer;
}
lost, reserve 벡터를 오름차순으로 정렬한다.
여벌 체육복을 가져온 학생이 체육복을 도난당했을 경우 다른사람에게 여벌옷을 빌려줄 수 없기때문에 for문을 통해 2중반복문을 순회하면서 lost==reserve인 학생을 찾아내 lost배열에 -1 표시를 한다.
이중 for문을 돌면서 번호 차이가 1이하인 학생에게 체육복을 빌려준다. 이때 lost 배열에서 -1이 아닌 번호만 고려해 빌려준다.