SW/알고리즘

C++ : 프로그래머스 : 체육복: 풀이

얇은생각 2019. 5. 28. 12:30
반응형

풀이

#include <string>
#include <vector>

using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> student(n);
for(int i = 0; i < lost.size(); i++){
student[ lost[i]-1 ] += -1;
}
for(int i = 0; i < reserve.size(); i++){
student[ reserve[i]-1 ] += 1;
}
for(int i=0; i < student.size(); i++){
if( student[i] == 1){
if( i - 1 > -1){
if( student[i-1] == -1 ){
student[i-1] += 1;
student[i] += -1;
}
}
}
if( student[i] == 1){
if( i + 1 < student.size()){
if( student[i+1] == -1 ){
student[i+1] += 1;
student[i] += -1;
}
}
}
}
for(int i = 0; i< student.size(); i++){
if( student[i] == 0 || student[i] == 1)
++answer;
}
return answer;
}


채점 결과

정확성 테스트
테스트 1 통과 (0.01ms, 3.74MB)
테스트 2 통과 (0.00ms, 3.82MB)
테스트 3 통과 (0.00ms, 3.73MB)
테스트 4 통과 (0.00ms, 3.76MB)
테스트 5 통과 (0.00ms, 3.82MB)
테스트 6 통과 (0.00ms, 3.75MB)
테스트 7 통과 (0.00ms, 3.84MB)
테스트 8 통과 (0.00ms, 3.82MB)
테스트 9 통과 (0.00ms, 3.71MB)
테스트 10 통과 (0.00ms, 3.93MB)
테스트 11 통과 (0.00ms, 3.89MB)
테스트 12 통과 (0.00ms, 3.77MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0


총평

먼저 학생 수 만큼 벡터를 할당합니다. 할당시에 0으로 알아서 초기화가 되어 있습니다. 해당 벡터에  lost에 해당되는 학생들을 -1 씩 더해줍니다. 또 여분의 체육복을 가지고 있는 학생들에게 +1 씩 더해주었습니다. 그 다음 앞에서부터 여분의 체육복을 가지고 있는 경우 앞뒤로 학생들이 체육복을 도난 당했는지 확인합니다. 도난 당한 경우 +1을 더해주고 빌려준 학생은 -1을 더해줍니다. 최종적으로 벡터에 0과 1을 가지고 있는 학생들을 체육 수업에 참여할 수 있으므로 카운트를 해주었습니다. 해당 코드는 여분의 체육복을 하나씩만 가지고 있는다는 가정하에 동작합니다. 여분의 체육복을 2벌 이상 가지고 있는 경우의 수 가 있다면 이 알고리즘은 유효하지 않으며 수정해야 할 부분이 있습니다. 

반응형