#include <string>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
set<int> s;
//소거법으로 없애는 게 좋을듯
for(int i=1;i<=n;i++) s.insert(i);
for(int e:lost) s.erase(e);
for(int e:reserve){
//뒷 친구 없을 때
if(!s.count(e+1) && e!=n) s.insert(e+1);
//본인 없을 때
else if(!s.count(e)) s.insert(e);
//앞 친구 없을 때
else if(!s.count(e-1)&&e!=1) s.insert(e-1);
}
answer=s.size();
return answer;
}
자꾸 정확성 83임ㅜㅜ 어렵고도 먼 코테의 길,
일단 벡터는 다른 자료구조로 옮기는 게 좋을듯 특히 find 쓸 때 인자 넣기 너무 불편
#include <string>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int solution(int n, vector<int> lost, vector<int> reserve) {
int answer = 0;
set<int> s;
set<int> lostset(lost.begin(),lost.end());
set<int> reserveset(reserve.begin(),reserve.end());
//소거법으로 없애는 게 좋을듯
for(int i=1;i<=n;i++) s.insert(i);
for(int e:lostset) {
if(reserveset.count(e)){
//본인 게 없으면
reserveset.erase(e);
}else{
s.erase(e);
}
}
for(int e:reserveset){
//앞 친구 없을 때
if(!s.count(e-1)&&e!=1) s.insert(e-1);
//뒷 친구 없을 때
else if(!s.count(e+1) && e!=n) s.insert(e+1);
}
answer=s.size();
return answer;
}
수정한 부분
-> erase, reserve를 reserve 탐색하기 전 중복 다 제거
-> 오름차순에서 앞친구 먼저 그리디 해야 누락이 없음
'coding > 프로그래머스 알고리즘 고득점 kit : cpp' 카테고리의 다른 글
| [C++] 프로그래머스 '입국심사' 풀이 (0) | 2026.06.08 |
|---|---|
| [C++] 프로그래머스 '올바른 괄호' 풀이 (0) | 2026.06.08 |
| [C++] 프로그래머스 '정수 삼각형' 풀이 (0) | 2026.06.05 |
| [C++] 프로그래머스 '모의고사' 풀이 (0) | 2026.06.04 |
| [C++] 프로그래머스 'N으로 표현' 풀이 (0) | 2026.06.04 |
