반응형
#include <string>
#include <vector>
using namespace std;
int student[31];
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 = 0; i <= n; i++){
if(student[i] == -1){
if(student[i - 1] > 0){
student[i] = student[i - 1] = 0;
}
else if(student[i + 1] > 0){
student[i] = student[i + 1] = 0;
}
}
}
for(int i = 1; i <= n; i++){
if(student[i] != -1) answer++;
}
return answer;
}
탐욕법 탭의 체육복 문제.
for 반복문의 새로운 사용방법을 배운 시간이었다.
완전히 비효율적인 방법으로 문제를 풀다가막혀 문제를 찾아보고 풀게 되었는데, 진짜 코앞에서 헤메고 있었던것 이었다.
for(int i : reserve) 를 이용하여 i의 값에 reserve의 값을 하나하나 넣어준다. foreach와 비슷한 사용방법 같았다.
그리고 각각의 학생 번호에 체육복의 여분갯수를 추가하여, 체육복을 더 가지고 있는 학생은 +1을, 보유하지 않은 학생은 -1을 넣어 하나하나 체크를 시작한다.
학생을 한명한명 돌면서, 체육복이 -1개인 학생을 발견하면, 우선 앞번호의 학생에게 체육복이 있는지 체크하고, 없다면 뒷 학생을 체크하여 둘중한명에게 체육복을 가져오거나, 혹은 아무에게도 가져오지 못하게 된다.
확인이 끝난 후에는 학생 번호 리스트를 다시한번 반복문으로 돌려, 체육복이 -1개가 아닌 학생의 수만 세어 answer에 더해 리턴하는것으로 끝나는 것.
공부를 하면할수록 몰랐던 부분이 많았던걸 깨닫는중이다...
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 (0) | 2021.03.24 |
---|---|
[프로그래머스] 타겟넘버 (0) | 2021.03.22 |
[프로그래머스] 모의고사 문제 (0) | 2021.03.12 |
[프로그래머스] 완주하지 못한 선수 문제 (0) | 2021.03.12 |
K번째 수 (0) | 2021.03.07 |
댓글