Imam Fahmi Fadillah
JDS Engineering
Published in
4 min readJan 8, 2023

--

Tips Meningkatkan Skill Problem Solving di HackerRank

Photo by Arnold Fransisca on Unsplash

Salam sobat codinger,
Perkenalkan saya Imam Fahmi Fadillah salah satu dari tim Backend Engineer (Jabar Digital Service). Pada kesempatan kali ini, kami (Backend Engineer JDS) mendapatkan challenge untuk menyelesaikan problem solving di HackerRank. Menurut saya, selain mempelajari Tech Stack yang sedang trend saat ini, mengingkatkan skill khususnya pada problem solving Algoritma sangat diperlukan untuk seorang Software Engineer / Backend Engineer. Ini bertujuan agar skill terus meningkat dan dapat diimplementasikan pada Aplikasi yang kita buat ketika ada masalah yang perlu diselesaikan menggunakan Algoritma khususnya.

Tips dari saya ketika ingin meningkatkan skill di HackerRank jangan langsung mengerjakan challenge dengan level expert (terkecuali sudah pede dengan kemampuan sendiri), secara bertahap dari mulai level easy (di level ini lumayan cukup menguras otak juga 😅) kemudian setelah dirasa cukup pada level easy naik ke level medium dan sampai ke level expert. Karena semakin tinggi levelnya, maka akan semakin berat juga ujiannya.

Selanjutnya, Mari kita bahas beberapa challenge yang sudah saya selesaikan. ohh iya, untuk bahasa pemrograman yang saya gunakan untuk menyelesaikan task yaitu menggunakan bahasa PHP (bahasa sejuta umat 😄). Teman — teman bisa memilih menggunakan bahasa yang dikuasai seperti Golang, Js, Java, C dll.

  • Picking Numbers (level easy dengan skor 20 poin)

Pada challenge ini kita akan mencari nilai tertinggi dari sebuah array, dimana nilai tersebut didapat dari 2 element yang dijumlahkan. Oke langsung aja kita cek code di bawah ini:

<?php

/*
* Complete the 'pickingNumbers' function below.
*
* The function is expected to return an INTEGER.
* The function accepts INTEGER_ARRAY a as parameter.
*/

function pickingNumbers($a) {
$count = array_count_values($a); // menghitung jumlah value dari array $a
$result = 0; // variabel untuk menampung hasil akhir
foreach($count as $key => $val){ // melakukan pengulangan dari array yang telah dihitung.
$temp = $count[$key+1] + $val; // menjumlahkan 2 element dan dimasukan kedalam variabel
if($temp >= $result){ // kondisi jika $temp >= $result
$result = $temp; // memasukan value dari variabel $temp ke $result
}
}

return $result;
}

echo pickingNumbers($a);

Penjelasan dari code di atas, sebuah variabel a memiliki nilai yang telah ditentukan, kemudian nilai yang sering muncul dalam variabel a dihitung menggunakan fungsi array_count_values() dan disimpan kedalam variabel count, kemudian dilakukan pengulangan untuk mendapatkan nilai dalam array tersebut yang kemudian menjumlahkan 2 element ( count[key+1] + val ) dan dibandingkan dengan nilai result, ketika temp ≥= result maka nilai dari temp dimasukan kedalam result, dan proses pengulangan akan terus dilakukan sampai menemukan nilai tertinggi. oke kita lanjut ke challenge berikutnya.

  • The Time In Words (level medium dengan skor 25 poin)

Selanjutnya, pada challenge ini kita mengkonversi waktu dalam bentuk angka menjadi kata-kata. mari kita cek code di bawah ini:

function timeInWords($h, $m) {
$result = '';
$stringNumber = [
'', 'one','two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'
];

if($m == 0){
$result = $stringNumber[$h]." o' clock";
}elseif($m == 15){
$result = 'quarter past '.$stringNumber[$h];
}elseif($m == 30){
$result = 'half past '.$stringNumber[$h];
}elseif($m == 45){
$result = 'quarter to '.$stringNumber[$h+1];
}elseif($m > 30 && !in_array($m, [45,60])){
$result = $stringNumber[60-$m].' minutes to '.$stringNumber[$h+1];
}elseif($m < 30 && !in_array($m, [0, 1, 15])){
$result = $stringNumber[$m].' minutes past '.$stringNumber[$h];
}else{
$result = $stringNumber[$m].' minute past '.$stringNumber[$h];
}
return $result;
}

echo timeInWords($h, $m);

Dari function timeInWords menerima 2 variabel h dan m, kedua variabel ini berisi nilai berupa integer. Kemudian membuat sebuah variabel stringNumber berupa array yang memiliki nilai dari angka 1–29 berupa string. Selanjutnya dibuatkan beberapa kondisi (if else) untuk mencetak hasilnya dari variabel h dan m.

  • Extra Long Factorials (Level Medium dengan skor 20 poin)

Challenge terakhir yang akan dibahas yaitu tentang menghitung bilangan Faktorial dengan inputan n, sebagai contoh inputan n bernilai 25 maka kita akan menghitung f = 25 * 24 * 23 ………. * 3 * 2 * 1.

function extraLongFactorials($n) {
$factorial = $n;
for($i = $n; $i > 1; $i--) {
$factorial = bcmul($factorial, $i - 1);
}
echo $factorial;
}

echo extraLongFactorials($n);

Untuk menyelesaikan challange ini kita membutuhkan tipe data BigInt untuk mendapatkan hasil yang tepat, karena output dari bilangan faktorial berupa e-notation. Disini saya memanfaatkan fungsi perhitungan bcmul dari PHP untuk melakukan perhitungannya.

Oke teman-teman, sekian sharing yang saya dapat bagikan pada tulisan kali ini. Secara keseluruhan menyelesaikan challange di hackerrank ini cukup menguras waktu dan pikiran 😄 dan mudah-mudahan dapat meningkatkan skill problem solving kita.

--

--