탐욕법
- 각 순간에 최선의 경우를 택하는 방식
단 순간의 최선이 결국 최대의 최선이 만족될때에만 실행
https://programmers.co.kr/learn/courses/30/lessons/42862
코딩테스트 연습 - 체육복
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번
programmers.co.kr
#include <string>
#include <vector>
//#include <set>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
int count = 0;
vector<int> pure_lost;
for(auto it = lost.begin();it != lost.end(); it++)
{
auto it_s = find(reserve.begin(),reserve.end(),(*it));
if(it_s == reserve.end())
{
pure_lost.emplace_back(*it);
}
else
{
reserve.erase(it_s);
}
}
/*
for(auto it = pure_lost.begin();it != pure_lost.end(); it++)
{
cout << *it << endl;
}
*/
for(auto it = pure_lost.begin();it != pure_lost.end(); it++)
{
auto it_l = find(reserve.begin(),reserve.end(),(*it)-1);
auto it_r = find(reserve.begin(),reserve.end(),(*it)+1);
if(it_l != reserve.end()) // 왼쪽에 빌릴수 있나 ?
{
cout << "it_l "<< *it << ',' << *it_l <<endl;
count++;
reserve.erase(it_l);
}
else if(it_r != reserve.end()) // 오른쪽에 빌릴수 있나 ?
{
cout << "it_r "<< *it << ',' << *it_r <<endl;
count++;
reserve.erase(it_r);
}
}
for(auto it = reserve.begin();it != reserve.end(); it++)
{
cout << *it << endl;
}
answer = n - pure_lost.size() + count;
return answer;
}
'공부,일 > 코딩테스트' 카테고리의 다른 글
네트워크 (0) | 2021.11.06 |
---|---|
최소 비용 신장 트리 , 섬연결하기 (0) | 2021.11.05 |
전화번호 목록 (0) | 2021.10.24 |
tow sum (0) | 2021.10.24 |
코딩 테스트 사이트 모음 (0) | 2021.10.18 |
댓글