[ 문제 ] : https://programmers.co.kr/learn/courses/30/lessons/42862
[ 문제 접근 ]
student 벡터 하나 만들어서 체육복 개수를 나타내고 첫번째 학생부터 순회하면서 앞뒤로 체육복 빌릴 수 있으면 빌리고 answer++
첫번째와 마지막 학생은 뒤나 앞을 비교 할 수 없기 때문에 동일한 로직을 했을때 out of range 오류가 날 수 있기 때문에 따로 처리.
[ 최종 코드 ]
#include <string>
#include <vector>
#include<iostream>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> student(n+1,1);
for(auto elem:lost) student[elem]--;
for(auto elem:reserve) student[elem]++;
for(int i=1;i<=n;i++){
if(i==1 && student[i]<1){ // 첫번째 학생이 체육복 없을때
if(student[i+1] >1)
{
student[i+1]--;
answer++;
continue;
}
}
else if(i==n && student[i]<1){ // 마지막 학생이 체육복 없을때
if(student[i-1] >1) {
student[i-1]--;
answer++;
continue;
}
}
else if(student[i]<1){
if(student[i-1] >1) {
student[i-1]--;
answer++;
continue;
}
else if(student[i+1]>1){
student[i+1]--;
answer++;
continue;
}
}
else{
answer++;
}
}
return answer;
}
[ 다른 사람 풀이 ]
'PS > Programmers' 카테고리의 다른 글
[큰 수 만들기] - 그리디 ★★★☆ / 복습 ○ (0) | 2021.12.28 |
---|---|
[카펫] - 완전탐색 ★★☆☆ / 복습 ○ (0) | 2021.12.26 |
[소수 찾기] - 완전탐색 ★★☆☆ / 복습 ○ (0) | 2021.12.26 |
[모의고사] - 완전탐색 ★☆☆☆ / 복습 ○ (0) | 2021.12.26 |
[가장 큰 수] - 정렬 ★★☆☆ / 복습 ○ (0) | 2021.12.22 |