저를 포함해서 문제를 한 번에 이해하지 못한 분들이 많은 거 같습니다 질문하기가 75개로 본 것 중 가장 많았습니다!
저는 5번 째 제한사항 "여벌을 가져온 학생이 체육복을 도난당했을 수 있다."에서 걸렸습니다ㅜㅜ
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0, i;
vector<int> arr(n,1);
for(i=0; i<reserve.size(); i++)
arr[reserve[i]-1]++;
for(i=0; i<lost.size(); i++)
arr[lost[i]-1]--;
for(i=0; i<n-1; i++){
if(!arr[i] && arr[i+1] > 1){
arr[i] = 1;
arr[i+1]--;
}
else if(!arr[i] && arr[i-1] > 1){
arr[i] = 1;
arr[i-1]--;
}
}
for(i=0; i<n; i++)
if(arr[i]) answer++;
return answer;
}
arr(n,1)로 배열을 1로 초기화를 합니다. lost, reserve 배열은 학생들의 번호를 알려줍니다. 1번부터 시작해도 되지만, 저는 배열의 시작을 0번부터 하고 싶어서 -1을 해줬습니다. 여분이 있는 학생은 2를, 여분이 없는 학생은 0으로 만들었습니다.
!arr[i]는 arr[i]==0으로 생각해도 됩니다. 체육복이 없는 학생 앞, 뒤로 혹시 여벌이 있는 학생이 있다면 체육복이 없는 학생을 1로 바꿔서 빌렸다고 표현하고 빌려준 학생은 --를 해서 빌려줬다고 표현했습니다.
arr[i]가 0이 아니면 계속 더합니다. 0인 경우는 가져오지 못했거나 빌리지도 못한 경우이기 때문에 빼고 더합니다.
백준 14503 - 로봇 청소기 Python (0) | 2020.11.03 |
---|---|
백준 2606 - 바이러스 C++ (0) | 2019.11.25 |
[2020카카오공채] 문자열 압축(C++) (0) | 2019.11.13 |
프로그래머스 Level 2 - 쇠막대기(C++) (0) | 2019.10.12 |
프로그래머스 Level 2 - 탑(C++) (0) | 2019.10.12 |