LeetCode – Small Task Solver untuk Programmer

Leet Code

Programming adalah seni memecahkan masalah dengan menggunakan prosedur yang sesuai dan dapat dibuktikan secara diskrit.

Pelatihan dalam programming akan membantu seseorang untuk lebih objektif dalam memecahkan masalah dan mengasah insting untuk selalu berpikir logis dalam penyelesaian masalah. Selain itu, kemampuan programming juga membantu seseorang untuk mengorganisir banyak hal secara efektif dan efisien.

Beberapa waktu yang lalu saya pernah posting tentang matematika komputasi dengan menggunakan sebuah website yang penuh dengan masalah matematika bernama projecteuler. Sekarang saya akan datang dengan website penuh masalah yang baru yaitu LeetCode.

Small task solver, adalah sesuatu yang harus dikuasai oleh programmer. Programmer tidak dapat dengan mudah memecahkan masalah langsung besar sekaligus sehingga mereka biasanya akan memecahkan masalah menjadi kecil-kecil dan kemudian memecahkan masalah kecil tersebut menjadi solusi untuk masalah yang lebih besar.

Ini lah yang ditawarkan oleh LeetCode. Website ini menyediakan masalah-masalah trivial dalam komputasi yang mungkin bisa dibilang remeh tapi jika kalian mengetahui proses apa yang terjadi di belakang setiap layar hape maupun desktop kalian, kalian akan memahami bahwa masalah kecil itu penting sekali.

Oke, sekarang saya contohkan yang sederhana saja. Kita akan mencoba untuk mengubah angka romawi menjadi angka arab. Terdengar sederhana bukan? Saya akan menjelaskan beberapa step-step dalam menyelesaikan masalah ini.

Pertama kita harus tahu dasar aturan angka romawi. Dasar aturannya adalah sebagai berikut:

  1. Memiliki beberapa angka utama yaitu I V X L X D M
  2. Untuk membuat angka baru dari angka utama maka angka utama akan di deretkan untuk ditambahkan dengan urutan menurun dari kiri ke kanan.
  3. Tidak boleh ada angka utama yang berderet lebih dari 4 kali
  4. Jika angka yang lebih kecil berada di kiri angka yang lebih besar, maka angka yang lebih besar akan dikurangi oleh angka yang dikirinya.
  5. Angka yang lebih kecil hanya boleh dua tingkat di bawah angka yang di kanan (Jadi 99 bukan IC)

Baik… Dari aturan itu kita akan buat prosedurnya dengan bahasa instruksi saja dulu. Langkah-langkah secara logis untuk menyelesaikan masalah itu dengan komputasi adalah:

  1. Kita mengambil input dari pengguna dan memberikan list bilangan utama.
  2. Kita lihat dari kiri satu bilangan di kanannya.
  3. Jika bilangan di kanan lebih kecil, maka kita tambahkan, jika lebih besar maka kita kurangkan

Itu adalah langkah yang logis dan mungkin itu adalah insting pertama yang ada pada seorang programmer untuk memecahkan masalah ini.

Mari kita bahas satu persatu

List bilangan utama

Kita akan menggunakan dictionary pada python dan dideklarasikan dengan menggunakan kurung kurawal

num = {
	"I" : 1,
	"V" : 5,
	"X" : 10,
	"L" : 50,
	"C" : 100,
	"D" : 500,
	"M" : 1000
}

Lihat bilangan dari kiri ke kanan

Maka kita akan pakai perulangan for dari kiri ke kanan.

res = 0 
for i, j in enumerate(s) :

Dikurangi atau ditambah?

Jika angka yang dikanan lebih besar maka dikurangi, jika angka yang dikanan lebih kecil maka ditambah

if num[j] >= num[s[i+1]] : 
res += num[j]
else :
res -= num[j]

Cukup sederhana bukan… Coba kita run, ternyata ada masalah kecil, error index out of range.

Inilah yang membuat menjadi programmer itu seru dan berguna. Ketika terjadi error, otak akan langsung terangsang untuk mencari apa kira-kira kesalahan apa yang menyebabkan program yang sudah kita susun (bahkan hanya program kecil seperti ini saja kita bisa error).

Programmer harus bisa menganalisis semua skenario dalam error tersebut dan terlihatlah sesuatu yang aneh dalam prosedur diatas.

Kesalahannya ada pada prosedur yang keempat untuk pengecekan bilangan yang ke kanan. Jika ternyata perulangannya berada di akhir bilangan, maka bilangan apa yang ada dikanan bilangan akhir? Tidak ada… Ini dia yang menyebabkan error, akhirnya kita menemukan tersangkanya.

Lalu? Bagaimana solusinya?

Apakah kita harus mengecek juga apakah string itu berada di akhir atau enggak? Sepertinya itu memang solusi terbaik.

Tidak juga…. Ini juga merupakan sesuatu yang penting bagi programmer.

Jangan mempersulit untuk menulis kode yang tidak perlu. Just keep it simple.

Bilangan yang akhir selalu bernilai plus sehingga tidak perlu dikurangi. Artinya kita hanya harus melakukan perulangan sampai dengan bilangan yang kedua terakhir saja kemudian menambahkan bilangan terakhirnya.

Hasil akhirnya adalah seperti ini

num = { "I" : 1, "V" : 5, "X" : 10, "L" : 50, "C" : 100, "D" : 500, "M" : 1000 } 
res = 0
s = input()
for i, j in enumerate(s[:-1]) :
if num[j] >= num[s[i+1]] :
res += num[j]
else :
res -= num[j]
res += num[s[-1]]
print(res)

Kalian dapat melihat problem seperti ini di LeetCode. Jika kalian tertarik dengan pemecahan masalah kecil tapi efektif sehingga bisa menyelesaikan masalah yang lebih besar, kalian dapat melihat masalah itu di Leetcode

LeetCode – Small Task Solver untuk Programmer

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Kembali ke Atas
www.000webhost.com