#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();
int i = 0;
int j = 0;
sort(lost.begin(), lost.end());
sort(reserve.begin(), reserve.end());
for (int k = 0; k < reserve.size(); ++k) {
if (find(lost.begin(), lost.end(), reserve[k]) != lost.end()) {
lost.erase(find(lost.begin(), lost.end(), reserve[k]));
reserve.erase(reserve.begin() + k);
++answer;
k=-1;
}
}
while (i < lost.size() && !reserve.empty()) {
if (j >= reserve.size()) {
++i; j = 0;
}
else if (lost[i] == reserve[j] - 1 || lost[i] == reserve[j] + 1) {
++answer;
lost.erase(lost.begin() + i);
reserve.erase(reserve.begin() + j);
i = 0; j = 0;
}
else {
++j;
}
}
return answer;
}
탐욕법(greedy) 알고리즘을 사용하는 문제입니다. 낮은 순이던 큰 순이던 남은 체육복을 줄 수 있는 친구들에게 순서대로 제공하는 것이 최대로 제공하는 것이라는 점만 생각하면 쉽게 풀 수 있는 문제입니다.
문제: https://programmers.co.kr/learn/courses/30/lessons/42862
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스/파이썬] 2023 카카오 블라인드 리크루팅 표 병합 (0) | 2023.03.28 |
---|---|
[프로그래머스/C++] 콜라츠 추측 (0) | 2022.01.28 |
[프로그래머스/C++] H-Index (0) | 2022.01.28 |
[프로그래머스/C++] 가장 큰 수 (0) | 2022.01.28 |
[프로그래머스/C++] 큰 수 만들기 (0) | 2022.01.20 |