ห้องสี่เหลี่ยมจัตุรัสมีกระจก 4 ด้าน ที่มุม 3 มุม (ยกเว้นมุมตะวันตกเฉียงใต้) มีเซ็นเซอร์หมายเลข 0, 1, 2 เลเซอร์ออกจากมุมตะวันตกเฉียงใต้ ชนผนังตะวันออกที่ห่างจากเซ็นเซอร์ 0 ระยะ q ห้องกว้าง p หาว่าเลเซอร์จะชนเซ็นเซอร์ไหนก่อน
ตัวอย่าง
p = 2, q = 1 → Output: 2

แนวทางแก้ปัญหา (คณิตศาสตร์)
- ลด p และ q ด้วย 2 จนกว่าจะมีตัวใดตัวหนึ่งเป็นคี่
- ถ้า p เป็นคู่ → เซ็นเซอร์ 2
- ถ้า q เป็นคู่ → เซ็นเซอร์ 0
- อื่นๆ → เซ็นเซอร์ 1
หลักการ: เหมือนกับการหาจุดที่เลเซอร์ชนมุมในกริดที่ขยายจากการสะท้อน
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int mirrorReflection(int p, int q) {
while (p % 2 == 0 && q % 2 == 0) {
p >>= 1; q >>= 1;
}
if (p % 2 == 0) return 2;
if (q % 2 == 0) return 0;
return 1;
}
};
int main() {
Solution ob;
cout << ob.mirrorReflection(2, 1); // Output: 2
return 0;
}
ผลลัพธ์
2
บทความนี้แก้ปัญหา Mirror Reflection (LeetCode 858) โดยใช้คุณสมบัติของจำนวนคู่/คี่ หลังลดรูป p และ q ด้วย 2 จนกว่าจะมีตัวคี่ คำตอบขึ้นอยู่กับความคี่คู่ของ p และ q ที่เหลือ