*체육복(탐욕법 Greedy) 전체 학생의 수 n, 체육복을 도난당한 학생 lost[], 여분 학생 reserve[] reserve[] +1, -1 번호 학생에게 빌려줄수 있음. 수업을 들을 수 있는 학생의 최대값 #include <iostream> #include <algorithm> #include <vector> using namespace std; int solution(int n, vector lost, vector reserve) { int answer = 0; vector in; in.assign(n + 2, 1); for(int i = 0; i < lost.size(); i++) { in[lost[i]]--; } for(int i = 0; i < reserve.size(); i++) { in[reserve[i]]++; } for(int i = 1; i <= n; i++) { if(in[i] == 1 || in[i] == 2) answer++; else { if(in[i - 1] > 1) { in[i]++; in[i - 1]--; answer++; continue; } if(in[i + 1] > 1) { in[i]++; in[i + 1]--; answer++; continue; } } } return answer; } | cs |
::public/코딩테스트 풀이