문제
프로그래머스 코딩테스트 연습 - 체육복 (Level 1)
https://programmers.co.kr/learn/courses/30/lessons/42862
사용 알고리즘
- 그리디
풀이
각각의 학생마다 가지고 있는 체육복의 개수를 모두 센다. (0/1/2)
체육복의 없는 학생의 경우 앞쪽에서부터 차례대로 빌릴 체육복이 있는지(=옆에 2개를 가진 학생이 있는지) 확인.
빌린 것을 포함하여 체육복이 하나라도 있는 학생 수를 세서 출력.
나의 코드
#include <string>
#include <vector>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
vector<int> a;
a.push_back(0);
for(int i=1;i<=n;i++) a.push_back(1);
for(auto i:lost) a[i]--;
for(auto i:reserve) a[i]++;
for(int i=1;i<=n;i++){
if(a[i]==0){
if(a[i-1]>1) a[i]=1;
else if(a[i+1]>1){
a[i+1]--;
a[i]=1;
}
}
if(a[i]) answer++;
}
return answer;
}
남의 코드(좋아요 최다 코드)
#include <string>
#include <vector>
using namespace std;
int student[35];
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
for(int i : reserve) student[i] += 1;
for(int i : lost) student[i] += -1;
for(int i = 1; i <= n; i++) {
if(student[i] == -1) {
if(student[i-1] == 1)
student[i-1] = student[i] = 0;
else if(student[i+1] == 1)
student[i] = student[i+1] = 0;
}
}
for(int i = 1; i <=n; i++)
if(student[i] != -1) answer++;
return answer;
}
로직은 거의 비슷하다.
728x90
'PS > Programmers' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 - 두 개 뽑아서 더하기 (Level 1) (0) | 2021.06.21 |
---|---|
프로그래머스 코딩테스트 연습 - 폰켓몬 (Level 1) (0) | 2021.06.20 |
프로그래머스 코딩테스트 연습 - 음양 더하기 (Level 1) (0) | 2021.06.18 |
프로그래머스 코딩테스트 연습 - 내적(Level 1) (0) | 2021.06.17 |
프로그래머스 코딩테스트 연습 - K번째 수 (Level 1) (0) | 2021.06.17 |