Algorithm/프로그래머스
[프로그래머스/C++] 체육복
pinevienna
2021. 2. 8. 00:04
여분의 체육복이 있는 학생들이 체육복을 잃어버린 학생들에게 빌려주는데..
번호 앞, 뒷사람만 서로 빌려줄 수 있다고 한다
몇 명의 학생이 체육복을 입을 수 있는지 return하는 문제
여분이 있는 학생들이 체육복을 도난당하면 빌려줄 수 없기 때문에 그것까지 체크해야 했다
벡터를 하나 만들어서 거기에 디폴트 값으로 1을 주고, 잃어버린 애들은 -1 여분이 있는 애들은 +1을 해준다
그리고 그 벡터를 첨부터 탐색하면서.. 서로 사이좋게 나눠주면 된다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <string> #include <vector> using namespace std; int solution(int n, vector<int> lost, vector<int> reserve) { int answer = 0; vector<int> v(n, 1); for (int i = 0; i < lost.size(); i++) { v[lost[i] - 1]--; } for (int i = 0; i < reserve.size(); i++) { v[reserve[i] - 1]++; } for (int i = 0; i < v.size(); i++) { if (v[i] == 0) { if (i != 0 && v[i - 1] == 2) { v[i - 1]--; v[i]++; } else if (i != v.size() - 1 && v[i + 1] == 2) { v[i + 1]--; v[i]++; } } } for (int i = 0; i < v.size(); i++) { if (v[i] != 0) answer++; } return answer; } | cs |