ข้อสอบภาคเฉพาะ: คอมพิวเตอร์ระดับวิชาชีพ นายร้อยตำรวจ สายประมวลผล (คอมพิวเตอร์)
เขียนโปรแกรม โครงสร้างข้อมูล อัลกอริทึม ฐานข้อมูล SQL เครือข่าย subnet ความปลอดภัยไซเบอร์ ระบบปฏิบัติการ วิศวกรรมซอฟต์แวร์ และกฎหมายคอมพิวเตอร์
หัวข้อที่ออกสอบ
ตัวอย่างข้อสอบภาคเฉพาะ: คอมพิวเตอร์ระดับวิชาชีพ พร้อมเฉลย
ข้อ 1
การเขียนโปรแกรมพิจารณาโค้ดภาษา Python ต่อไปนี้ s = 0 for i in range(1, 10, 2): s = s + i print(s) ผลลัพธ์ที่แสดงออกทางหน้าจอคือข้อใด
- ก. 16
- ข. 20
- ค. 25
- ง. 45
ดูเฉลย เทคนิคติวเตอร์ และวิธีคิด
คำตอบ: ค. 25
เทคนิคติวเตอร์ — เห็นโจทย์แบบนี้ ตอบแบบนี้
เห็น range(a, b, step) → ไล่ค่าจาก a เพิ่มทีละ step และ "ไม่รวม b" เสมอ (ค่าสุดท้ายต้องน้อยกว่า b) เช็กเร็ว: จำนวนรอบ = (b − a) ÷ step แล้วปัดเศษขึ้น ถ้านับรอบได้ก่อนจะตัดตัวเลือกที่นับเกิน/ขาดไป 1 รอบได้ทันที
วิธีคิด
จับใจความโจทย์: ต้องรู้ว่า range(1, 10, 2) ให้ค่าอะไรบ้าง แล้วนำมาบวกสะสมใน s range(เริ่ม, หยุด, ก้าว) เริ่มที่ 1 เพิ่มทีละ 2 และหยุด "ก่อน" ถึง 10 → i = 1, 3, 5, 7, 9 s = 1 + 3 + 5 + 7 + 9 = 25 → print(s) แสดง 25 ตัวหลอก 16 มาจากตัด 9 ทิ้ง (คิดว่าค่าสุดท้ายไม่ถูกนับ) ได้ 1 + 3 + 5 + 7 ตัวหลอก 20 มาจากคิดเป็นเลขคู่ 2 + 4 + 6 + 8 และ 45 มาจากบวก 1 ถึง 9 ทุกตัว (ลืมก้าวทีละ 2)
ข้อ 2
โครงสร้างข้อมูลสแตก (Stack) ว่างเปล่า ทำคำสั่งตามลำดับดังนี้ push(4), push(9), pop(), push(1), push(6), pop(), push(8) เมื่อทำครบแล้ว ข้อมูลในสแตกเรียงจากล่างสุดขึ้นไปบนสุดเป็นอย่างไร
- ก. 4, 1, 8
- ข. 1, 6, 8
- ค. 4, 9, 8
- ง. 4, 6, 8
ดูเฉลย เทคนิคติวเตอร์ และวิธีคิด
คำตอบ: ก. 4, 1, 8
เทคนิคติวเตอร์ — เห็นโจทย์แบบนี้ ตอบแบบนี้
เห็น Stack / push / pop → LIFO ตัวที่เข้าล่าสุดออกก่อน (เหมือนกองจาน) · เห็น Queue / enqueue / dequeue → FIFO ตัวที่เข้าก่อนออกก่อน (เหมือนแถวรอคิว) วาดกล่องแนวตั้งแล้วเขียนตามทีละคำสั่ง เร็วและแม่นกว่าคิดในหัว
วิธีคิด
จับใจความโจทย์: สแตกทำงานแบบ LIFO (Last In, First Out) คำสั่ง pop() เอาตัวที่ใส่ "ล่าสุด" ออก push(4), push(9) → [4, 9] pop() เอา 9 ออก → [4] push(1), push(6) → [4, 1, 6] pop() เอา 6 ออก → [4, 1] แล้ว push(8) → [4, 1, 8] ตัวหลอก 1, 6, 8 คือผลถ้าเป็นคิว (FIFO) ที่เอาตัวแรกออก · 4, 9, 8 และ 4, 6, 8 มาจาก pop ผิดตัว
ข้อ 3
โครงสร้างข้อมูลการค้นหาในกราฟแบบกว้างก่อน (Breadth-First Search: BFS) นิยมใช้โครงสร้างข้อมูลใดเก็บโหนดที่รอการเยี่ยม
- ก. คิว (Queue)
- ข. สแตก (Stack)
- ค. ต้นไม้ค้นหาแบบทวิภาค (BST)
- ง. ตารางแฮช (Hash Table)
ดูเฉลย เทคนิคติวเตอร์ และวิธีคิด
คำตอบ: ก. คิว (Queue)
เทคนิคติวเตอร์ — เห็นโจทย์แบบนี้ ตอบแบบนี้
เห็น BFS / ทีละระดับ / เส้นทางที่ผ่านจำนวนเส้นน้อยสุด → Queue · เห็น DFS / ย้อนรอย (backtracking) / recursion → Stack จำคู่: BFS คู่กับคิว (เข้าก่อนออกก่อน) · DFS คู่กับสแตก (เข้าหลังออกก่อน)
วิธีคิด
จับใจความโจทย์: BFS เยี่ยมโหนดทีละระดับ คือเยี่ยมเพื่อนบ้านทุกตัวของโหนดปัจจุบันก่อน แล้วค่อยไปชั้นถัดไป โหนดที่ค้นพบก่อนต้องถูกเยี่ยมก่อน = เข้าก่อนออกก่อน (FIFO) จึงใช้คิว ตัวหลอก สแตก (LIFO) ใช้กับการค้นหาแบบลึกก่อน (DFS) · BST ใช้ค้นหาค่าที่เรียงลำดับ · ตารางแฮชอาจใช้จำว่าโหนดใดเยี่ยมแล้ว (visited) แต่ไม่ได้กำหนดลำดับการเยี่ยม
ข้อ 4
อัลกอริทึมและ Big-Oข้อใดกล่าวถึงการค้นหาแบบทวิภาค (Binary Search) ได้ถูกต้อง
- ก. ใช้ได้กับข้อมูลที่ยังไม่เรียง และกรณีแย่ที่สุดเป็น O(log n)
- ข. ข้อมูลต้องเรียงลำดับก่อน และกรณีแย่ที่สุดเป็น O(n)
- ค. ข้อมูลต้องเรียงลำดับก่อน และกรณีแย่ที่สุดเป็น O(log n)
- ง. ใช้ได้กับข้อมูลที่ยังไม่เรียง และกรณีแย่ที่สุดเป็น O(n log n)
ดูเฉลย เทคนิคติวเตอร์ และวิธีคิด
คำตอบ: ค. ข้อมูลต้องเรียงลำดับก่อน และกรณีแย่ที่สุดเป็น O(log n)
เทคนิคติวเตอร์ — เห็นโจทย์แบบนี้ ตอบแบบนี้
เห็น "ตัดครึ่ง/แบ่งครึ่งทุกรอบ" → Big-O เป็น log n · เห็น Binary Search → ต้องคู่กับคำว่า "ข้อมูลเรียงแล้ว" เสมอ ตัวเลือกไหนบอกว่า Binary Search ใช้กับข้อมูลที่ไม่เรียงได้ ตัดทิ้งทันที
วิธีคิด
จับใจความโจทย์: ต้องรู้ทั้ง "เงื่อนไขก่อนใช้" และ "ความเร็ว" ของ Binary Search Binary Search เทียบกับค่ากึ่งกลาง แล้วตัดข้อมูลทิ้งครึ่งหนึ่งทุกรอบ จึงใช้ได้กับข้อมูลที่เรียงแล้วเท่านั้น ตัดครึ่งไปเรื่อย ๆ จาก n จนเหลือ 1 ใช้ประมาณ log₂ n รอบ → O(log n) ตัวหลอกที่บอกว่าใช้กับข้อมูลไม่เรียงได้ผิด เพราะจะตัดทิ้งผิดฝั่ง · O(n) คือ Linear Search ที่ไล่ทีละตัว
ข้อ 5
ระบบเลขฐานและการแทนข้อมูลเลขฐานสิบหก 3A7₁₆ เมื่อแปลงเป็นเลขฐานสอง (แบ่งกลุ่มละ 4 บิต) จะได้ข้อใด
- ก. 0011 1010 0111
- ข. 0011 1100 0111
- ค. 0111 1010 0011
- ง. 0011 1010 0110
ดูเฉลย เทคนิคติวเตอร์ และวิธีคิด
คำตอบ: ก. 0011 1010 0111
สูตรที่ใช้
เลขฐานสิบหก 1 หลัก = เลขฐานสอง 4 บิต (ค่าประจำบิต 8, 4, 2, 1)
แยกเลขฐานสิบหกทีละหลัก และเปลี่ยนตัวอักษร A–F เป็นค่า 10–15
แปลงแต่ละหลักเป็นเลขฐานสอง โดยเติม 0 ด้านหน้าให้ครบ 4 บิต
นำกลุ่ม 4 บิตมาเรียงต่อกันตามลำดับหลักเดิม
⚠ ห้ามสลับลำดับกลุ่ม และห้ามตัดเลข 0 ด้านหน้าของกลุ่มที่อยู่ตรงกลาง
เทคนิคติวเตอร์ — เห็นโจทย์แบบนี้ ตอบแบบนี้
เห็นการแปลงฐาน 16 ↔ ฐาน 2 → ไม่ต้องผ่านฐานสิบ ใช้ 1 หลักฐาน 16 = 4 บิต (ค่าประจำบิต 8-4-2-1) จำ A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 · ฐาน 8 ↔ ฐาน 2 ใช้วิธีเดียวกันแต่กลุ่มละ 3 บิต
วิธีคิด
จับใจความโจทย์: เลขฐานสิบหก 1 หลัก = เลขฐานสอง 4 บิตพอดี จึงแปลงทีละหลักแล้วนำมาต่อกัน 3 = 0011 A = 10 = 1010 7 = 0111 เรียงต่อกันตามลำดับเดิม: 0011 1010 0111 ตัวหลอก 0011 1100 0111 แปลง A ผิดเป็น 12 (ซึ่งคือ C) · 0111 1010 0011 สลับลำดับหลักหน้า-หลัง · 0011 1010 0110 แปลง 7 ผิดเป็น 6