Penyelesaian Masalah Algoritma Piramida dengan JavaScript

Faris Adlin
6 min readJan 14, 2021

--

Kalau kamu programmer dan pernah melamar di perusahaan, pernah gak kamu berada di tahapan seleksi tes koding berupa penyelesaian masalah algoritma? Pernah dapat soal piramida kayak gambar di bawah ini?

Soal Legenda Algoritma Piramida

Pernah gagal karena gak bisa nyelesein masalah algoritma seperti gambar di atas?

Oh tenang … gak cuman kamu kok. Saya juga pernah gagal dan malah saking putus asanya, saya cuman ngelakuin kayak gambar di bawah saat pengumpulan jawaban tes.

Jelas dong gagal. Mana ada HR mau ngelanjutin tahapan kandidat kalau kandidatnya ngejawab kayak di atas. Ya meskipun hasilnya sesuai dengan yang diminta ya hahaha.

Nah kali ini saya ingin berbagi tahapan bagaimana cara menyelesaikan algoritma piramida di atas.

(N. B: Cara saya bukanlah yang paling efisien. Tapi cara ini yang dapat memudahkan saya dalam memecahkan algoritma. Karena percuma bisa copas tapi gak ngerti cara memecahkan masalahnya kan? Nanti kalau soalnya serupa tapi tak sama gimana dong? 😜)

  1. Tulis Dulu Solusinya Di Atas Kertas

Sebelum kamu memikirkan sintaks apa yang akan digunakan untuk menyelesaikan permasalahan algoritma ini, tulis dulu di atas kertas solusinya. Tapi untuk mempermudah penjelasan, saya lebih suka menaruh solusinya sebagai bentuk digital aja ya bukan tulisan tangan. Soalnya tulisan tangan saya jelek.

Hal pertama yang kamu akan lakukan, coba identifikasi dulu apa saja yang diketahui dari gambar piramida tersebut. Hitung berapa banyak kolom dan baris yang diketahui dari piramida tersebut. Buatlah seperti gambar di bawah ini.

Identifikasi Dulu Berapa Banyak Kolom dan Baris yang Dimiliki Piramida Tersebut

Setelah diketahui bahwa pada gambar tersebut, dibutuhkan 5 baris dan 9 kolom untuk membentuk piramida yang telah diperintahkan.

Kemudian masalah ini hanya dapat diselesaikan dengan iterasi (perputaran). Karena piramida ini membutuhkan 5 baris untuk membentuknya, maka diperlukan juga 5 iterasi untuk mengisi bintang pada kolom yang ditentukan setiap barisnya. Lihat hasilnya seperti pada gambar di bawah ini.

5 Iterasi yang Dibutuhkan dalam Penyelesaian Algoritma Piramida

Sampai di sini udah pusing belum? Kalau udah pusing, pelan-pelan aja. Saya juga awal-awal pusing mencoba memecahkan masalah piramida ini.

Kemudian setelah itu kita harus memikirkan bagaimana cara iterasi per kolom untuk setiap barisnya. Misalnya dalam baris 1, ada 9 kolom yang harus diintip. Begitu juga untuk baris selanjutnya hingga baris 5.

Dikarenakan ada 9 kolom yang harus diiterasikan, dan karena angka 9 merupakan angka ganjil, maka rumus yang akan digunakan ialah 2n-1. Yang mana n = baris yang dibutuhkan. Karena ada 5 baris, jadinya :

(2 * 5) — 1= 9

Rumus ini akan kita gunakan saat implementasi algoritma pada sintaks JavaScript nanti.

Terakhir, kita akan mencoba menemukan cara bagaimana menaruh bintang tersebut membentuk piramida. Pada baris 1 = 1 bintang, baris 2 = 3 bintang, baris 3 = 5 bintang, baris 4 = 7 bintang, dan baris 5 = 9 bintang. Artinya setiap kali baris meningkat, maka ada penambahan dua bintang dari baris sebelumnya dari baris 1 hingga baris 5.

Menaruh Bintang untuk Setiap Barisnya

Agar bintang-bintang tersebut dapat mengisi sesuai dengan kolom yang kita inginkan untuk membentuk sebuah piramida seperti gambar di atas, maka kita dapat melakukan pseudocode menggunakan conditional statement.

Jika kolom lebih dari atau sama dengan total baris ditambah 1 dikurang baris dan kolom kurang dari atau sama dengan total baris dikurang 1 ditambah baris maka bintang akan mengisi kolom tersebut. Jika tidak, maka kolom akan dilewati saja.

Kita ubah ke dalam bentuk statement aritmatika, yaitu:

If kolom total baris + 1 — baris && kolom ≤ total baris — 1 + baris then bintang mengisi kolom else skip kolom

Kita berikan satu contoh. Misalnya pada baris 1, jika kolom = 1, maka inputnya akan menjadi begini

If 1 ≥ 5 + 1 — 1 && 1 ≤ 5 — 1+1 then bintang mengisi kolom else skip kolom

If 1 ≥ 5 && 1 ≤ 5 then bintang mengisi kolom else skip kolom

Dikarenakan kondisi di atas tidak memenuhi, maka kolom akan skip, hingga memasuki kolom ke-5

If 5≥ 5+ 1 — 1 && 5≤ 5 — 1+1 then bintang mengisi kolom else skip kolom

If 5≥ 5 && 5≤ 5 then bintang mengisi kolom else skip kolom

Dikarenakan kondisi di atas sudah memenuhi, maka kolom ke-5 akan terisi dengan bintang.

Nah begitu juga untuk proses baris-2, dan seterusnya. Gimana? Masih waras gak? Coba liat foto kucing di bawah biar fresh gak liat angka melulu 😣

Photo by Tran Mau Tri Tam on Unsplash

2. Implementasi Sintaks JavaScript

Karena algoritmanya sudah kita selesaikan namun belum diterapkan dalam bentuk sintaks JavaScript, maka saatnya kita implementasikan.

Hal pertama yang akan kita terapkan ialah membuat function bernama pyramid dengan sebuah parameter n sebagai jumlah baris. Kemudian deklarasikan function dengan membawa argument = 5

const pyramid = (n) => {
};
pyramid(5);

Setelah itu kita akan menggunakan sebuah loop yang akan melakukan iterasi sebanyak 5 baris. Tidak lupa juga kita akan membuat sebuah variabel string kosong, yang nantinya digunakan untuk mengisi bintang atau spasi kosong di dalam loop tersebut.

const pyramid = (n) => {    for(let baris = 1; baris <= n; baris++) {    let ruang = "";    }};pyramid(5);

Setelah itu kita akan membuat sebuah loop lagi di dalam loop yang telah dibuat sebelumnya. Loop tersebut berfungsi untuk mengitari kolom yang ada di iterasi setiap baris.

(N.B: Jangan lupa diterapkan algoritma yang telah kita buat untuk mengitari kolom di iterasi setiap baris sebelumnya)

const pyramid = (n) => {    for(let baris = 1; baris <= n; baris++) {    let ruang = "";         for(let kolom = 1; kolom <= (2 * n - 1); kolom++) {
} }};pyramid(5);

Setelah itu kita masukkan conditional statement di dalam loop yang telah kita buat sebelumnya. Setelah dibuat, kita masukkan console.log di luar loop tersebut untuk memunculkan output dari sintaks yang telah kita buat.

const pyramid = (n) => {    for(let baris = 1; baris <= n; baris++) {       let ruang = "";       for(let kolom = 1; kolom <= (2 * n - 1); kolom++) {       if (kolom >= (n + 1 - baris) && kolom <= (n - 1 + baris)) {          ruang = ruang + "*";          } else {          ruang = ruang + " ";          }       }       console.log(ruang);    }};pyramid(5);

Kalau versi saya sendiri, saya dibandingkan menggunakan conditional statement if-else, mending saya menggunakan ternary operator sebagai ganti if-else dan assignment operator untuk mengisi variabel ruang. Jadinya seperti kode di bawah ini.

const pyramid = (n) => {   for(let baris = 1; baris <= n; baris++) {      let ruang = "";      for(let kolom = 1; kolom <= (2 * n - 1); kolom++) {      kolom >= (n + 1 - baris) && kolom <= (n - 1 + baris) ? ruang += "*" : ruang += " ";      }      console.log(ruang);   }};pyramid(5);

Nah outputnya nanti akan seperti di bawah ini.

Hasil Output Piramida

Full code bisa dilihat di sini

https://jsfiddle.net/farisadlin/2bygkvhu/76/

Gimana? Sudah paham sampai sini? Kalau belum, silahkan tanyakan di kolom komentar. Nanti saya jawab pas lagi senggang. Good luck!

--

--

Faris Adlin
Faris Adlin

Written by Faris Adlin

IT enthusiast. All about programming especially front-end

No responses yet