สถานการณ์: เริ่มต้นบนโน้ตแพดมีตัวอักษร 'A' เพียงตัวเดียว เราสามารถทำสองการดำเนินการในแต่ละขั้นตอน:
- Copy All - คัดลอกตัวอักษรทั้งหมดบนโน้ตแพด (ไม่สามารถคัดลอกบางส่วนได้)
- Paste - วางตัวอักษรที่คัดลอกไว้ล่าสุด
เราต้องเขียนฟังก์ชันที่รับตัวเลข num เป็นอาร์กิวเมนต์เดียว ฟังก์ชันต้องคำนวณและคืนค่าจำนวนขั้นตอนน้อยที่สุด (Copy All หรือ Paste) ที่ต้องใช้เพื่อพิมพ์ 'A' จำนวน num ครั้ง
ตัวอย่าง
ถ้าตัวเลขนำเข้าคือ:
const num = 3;
ผลลัพธ์ควรเป็น:
const output = 3;
เพราะขั้นตอนคือ:
- Copy All (ผลลัพธ์: 'A')
- Paste All (ผลลัพธ์: 'AA')
- Paste All (ผลลัพธ์: 'AAA')
ตัวอย่างโค้ด
const num = 3;
const minimumSteps = (num = 1) => {
let [curr, copy, steps] = [1, 0, 0];
while(curr != num) {
if((copy < curr) && ((num - curr) % curr) == 0) {
copy = curr;
} else {
curr += copy;
}
steps += 1;
}
return steps;
};
console.log(minimumSteps(num));
ผลลัพธ์
3