문제 링크
요약
- 꼼꼼하기만 하면 푸는 문제.
최종
결과
- 별로 어려운 문제는 아니다. 그냥 set에 저장해두고 처리하면 된다.
- 학생수가 30명 이하라 bms 사용했다. 이정도는 최적화는 누구나 할듯
#include <string>
#include <vector>
using namespace std;
#define bms unsigned int
int solution(int n, vector<int> lost, vector<int> reserve) {
bms lost_bms = 0, reserve_bms = 0, both;
int cnt = 0;
for (auto l : lost) {
lost_bms |= 1 << (l - 1);
}
for (auto r : reserve) {
reserve_bms |= 1 << (r - 1);
}
// Reserve but lost
both = lost_bms & reserve_bms;
lost_bms ^= both;
reserve_bms ^= both;
for (int i = 0; i < n; i++) {
if ((lost_bms >> i) & 0x1) {
// Help me
if ((i > 0) && ((reserve_bms >> (i - 1)) & 0x1)) {
// Before
reserve_bms ^= 1 << (i - 1);
cnt++;
} else if ((i + 1 < n) && ((reserve_bms >> (i + 1)) & 0x1)) {
// After
reserve_bms ^= 1 << (i + 1);
cnt++;
}
} else {
cnt++;
}
}
return cnt;
}- 하나 실수해서 삽질한건:
- 저
both변수 사용하기가 아까워lost_bms에lost_bms & reserve_bms를 XOR한 후, 뒤이어reserve_bms에도 XOR을 하였다. 당연히 그럼 에러가 난다. 뒤이은 statement 에서는lost_bms가 이미 바뀌어있기 때문.
- 저
