반응형
풀이
#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) |
채점 결과
총평
먼저 학생 수 만큼 벡터를 할당합니다. 할당시에 0으로 알아서 초기화가 되어 있습니다. 해당 벡터에 lost에 해당되는 학생들을 -1 씩 더해줍니다. 또 여분의 체육복을 가지고 있는 학생들에게 +1 씩 더해주었습니다. 그 다음 앞에서부터 여분의 체육복을 가지고 있는 경우 앞뒤로 학생들이 체육복을 도난 당했는지 확인합니다. 도난 당한 경우 +1을 더해주고 빌려준 학생은 -1을 더해줍니다. 최종적으로 벡터에 0과 1을 가지고 있는 학생들을 체육 수업에 참여할 수 있으므로 카운트를 해주었습니다. 해당 코드는 여분의 체육복을 하나씩만 가지고 있는다는 가정하에 동작합니다. 여분의 체육복을 2벌 이상 가지고 있는 경우의 수 가 있다면 이 알고리즘은 유효하지 않으며 수정해야 할 부분이 있습니다.
반응형
'SW > 알고리즘' 카테고리의 다른 글
C++ : 프로그래머스 : 두 정수 사이의 합 : 풀이 (0) | 2019.06.01 |
---|---|
C++ : 프로그래머스 : 같은 숫자는 싫어 : 풀이 (0) | 2019.05.31 |
C++ : 프로그래머스 : K번째수: 풀이 (0) | 2019.05.28 |
C++ : 프로그래머스 : 모의고사: 풀이 (0) | 2019.05.27 |
C++ : 프로그래머스 : 완주하지 못한 선수 : 풀이 (1) | 2019.05.27 |