반응형
728x170
이건 내가 푼 것보다 다른 사람이 훨씬 훨씬 잘풀었다.
참고해서 설명해보자
https://programmers.co.kr/learn/courses/30/lessons/42862?language=cpp
#맞는 풀이
#include <string>
#include <vector>
using namespace std;
int student[35]; // 학생 배열(체육복의 수가 value)
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문을 거치면 결국 빌려줄 수 있는 체육복을 가진 학생의 값 1이 될 것이고
// 체육복이 필요한 학생의 값이 -1이 될 것이다.
// 잃어버렸지만 여벌의 체육복을 자기가 쓰는 학생은 0이 되거나 잃어버리지도 않은 학생이 0이 될 것이다.
// 수업 가능한 학생은 value를 0이 가지거나 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; // 빌려준 사람도 수업 가능, 빌린 사람도 수업가능
}
}
//0과 1인 학생의 수를 센다 -> -1이 아닌 학생의 수를 센다
for(int i = 1; i <=n; i++)
if(student[i] != -1) answer++;
return answer;
}
이게 정말 직관적이고 좋은 풀이가 아닌가 싶다.
또 하나 배워간다.
+1 ,0, -1로 학생을 표현하는 법
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
프로그래머스, 3진법 뒤집기 : C++ [CPP] (0) | 2021.11.10 |
---|---|
프로그래머스, 폰켓몬 : C++ [CPP] (0) | 2021.11.09 |
프로그래머스, 모의고사 : C++ [CPP] (0) | 2021.11.07 |
프로그래머스, 완주하지 못한 선수 : C++ [CPP] (0) | 2021.11.07 |
프로그래머스, 카카오프렌즈 컬러링북 : C++ [CPP] (0) | 2021.11.05 |