Menyelesaikan soal leetcode: Difference Between Element Sum and Digit Sum of an Array
Mengerjakan soal leetcode itu susah susah gampang, kadang ada soal easy yang memang menurut saya gampang dan bisa langsung solved, tapi ada juga soal easy yang sampe setengah jam pun saya gabisa dapet solusinya🤣
Kali ini saya akan share gimana caranya menyelesaikan salah satu soal dengan difficulty easy, Difference Between Element Sum and Digit Sum of an Array menggunakan bahasa javascript. Untuk detail soal bisa di cek di link nya ya.
Input
nums = [1,15,6,3]
Step 1: Element sum
Untuk mendapatkan element sum, caranya cukup simple hanya dengan memanfaatkan built in array function di js yaitu reduce. Untuk case input diatas, berarti ini akan menjumlahkan 1 + 15 + 6 + 3.
let elSum = nums.reduce((a,b) => a+b)
Step 2: Digit sum
Untuk mendapatkan digit sum dengan case input diatas, ini berarti kita harus menjumlahkan 1 + 1 + 5 + 6 + 3. Untuk element dengan jumlah 1 digit tidak masalah, tapi ada case dimana element lebih dari 1 digit (15), kita harus memecah angka 15 menjadi 1 dan 5.
Pertama kita akan loop array nums dengan method map dan menjadikan semua integer menjadi string
nums.map(v => v.toString())
Di posisi ini, angka 15 menjadi “15”, lalu kita split string tersebut agar menjadi array
nums.map(v => v.toString().split(''))
Di posisi ini, angka 15 menjadi [“1”, “5”], karna ini bentuknya sudah menjadi array, kita bisa menggunakan method reduce untuk menjumlahkan angka-angka didalam array tersebut, mirip seperti di step 1.
nums.map(v => v.toString().split('').reduce((a, b) => parseInt(a) + parseInt(b)))
Di posisi ini, [“1”, “5”] sudah menjadi 6 karna sudah kita reduce. Karna method .map me return sebuah array, kita bisa melakukan reduce lagi untuk mendapatkan total dari digit
nums.map(v => v.toString().split(‘’).reduce((a,b)=>parseInt(a)+parseInt(b))).reduce((a,b)=>parseInt(a)+parseInt(b))
Agar code nya menjadi readable, kita assign value dari step 1 dan 2 ke variable masing-masing
let elSum = nums.reduce((a,b)=>a+b)
let dgSum = nums.map(v => v.toString().split('').reduce((a,b)=>parseInt(a)+parseInt(b))).reduce((a,b)=>parseInt(a)+parseInt(b))
Lalu return pengurangan dari elSum dan dgSum dengan hasil absolute
return Math.abs(elSum - dgSum)
Full code:
var differenceOfSum = function(nums) {
let elSum = nums.reduce((a, b)=> a + b)
let dgSum = nums.map(v => v.toString().split('').reduce((a,b)=>parseInt(a)+parseInt(b))).reduce((a,b)=>parseInt(a)+parseInt(b))
return Math.abs(elSum - dgSum)
};
Selesai👍