Tutorial Struktur Data Map Pada C++

Artikel ini adalah rangkaian tutorial struktur data pada C++ untuk persiapan Kompetisi Sains Nasional bidang Komputer 2020. Pada artikel ini kita akan bahas Struktur Data Map. Cek juga artikel sebelumnya tentang struktur data Vector.

TL;DR; Bagi yang agak pingin cepat, bisa baca tutorial di codingannya langsung di link berikut ini https://ideone.com/1Y7b2b

Apa itu struktur data map?

Di C++ ada 2 jenis struktur data map, yakni `std::map` dan `std::unordered_map`. Kedua struktur data tersebut memiliki fungsi yang bisa dibilang hampir sama, bedanya adalah `std::map`merupakan implementasi dari Self-Balancing Tree khususnya Red-Black Tree, sedangkan `std::unordered_map` menggunakan hash table.

Yang membedakan juga, sesuai dengan namanya, pada map data akan otomatis disimpan secara terurut menaik berdasar key nya, sedangkan unordered map tidak. Detailnya bisa dicek di bagian “Iterasi” di bawah.

Jika dilihat dari luar, kedua struktur data tersebut akan terasa mirip dengan array namun dengan index yang memungkinkan untuk berupa tipe data selain integer (mirip dengan dictionary di Python). Pada map, indeks tersebut diberi nama “key”.

Continue reading
struktur data vector

Tutorial Struktur Data Vector pada C++

Mendekati Kompetisi Sains Nasional (KSN), saya mau coba buat beberapa tutorial singkat tentang C++ yang semoga bisa bermanfaat. InsyaAllah tidak hanya untuk lomba programming, semoga ini bisa juga bermanfaat untuk yang akan menghadapi tes programming masuk kerja. Pada artikel pertama ini saya akan membahas struktur data Vector.

TL;DR; Bagi yang agak pingin cepat, bisa baca tutorial di codingannya langsung di link berikut ini https://ideone.com/vqSzoh

Apa itu struktur data vector?

Vector pada C++ (atau biasa disebut menggunakan std::vector) adalah Array dinamis, yakni array yang proses memungkinkan proses insert dan delete element pada bagian tengah array dan “seakan-akan” mengubah ukuran array tersebut. Berikut kira-kira ilustrasinya:

Pas kuliah algoritma pemrograman dulu mungkin kita pernah diminta dosen kita untuk membuat array dinamis memanfaatkan linked list. Nah, memang dengan linked list kita bisa membuat array dinamis sederhana. Tapi sebenarnya, secara definisi aslinya, linked list yang pernah kita buat bukanlah array dinamis (detail bisa ditanyakan via comment). Nah, std::vector ini lah yang disebut dengan array dinamis yang sebenarnya di C++.

Continue reading
tes pemrograman

Solusi Soal Tes Pemrograman untuk Daftar Kerja

Pada artikel sebelumnya sempat saya tunjukkan dua soal dari tes pemrograman yang biasa dilakukan sebagai tahapan pada proses seleksi rekrutmen kerja. Dua soal tersebut saya peroleh dari tes pemrograman yang pernah saya ikuti. Soal tersebut tidak 100% sama, tapi cukup menggambarkan bagaimana tingkat kesulitan tes pemrograman di luar sana. Pada artikel ini saya akan membahas solusi pengerjaan soal-soal tersebut.

Soal #1

Dari semua tes pemrograman yang saya ikuti, soal ini menurut saya adalah soal paling mudah. Jika disimpulkan, pertanyaan penting dari soal ini adalah tiga poin:

  1. Bagimana cara membaca string yang terdiri dari beberapa kata (dipisahkan oleh spasi) dalam satu baris?
  2. Bagaimana cara mengecek huruf pertama tiap kata?
  3. Bagaimana cara mengecek sekaligus mengubah huruf kapital ke non-kapital dan sebaliknya?

Saat itu saya mengerjakan soal ini menggunakan C++, dan berikut adalah poin-poin jawaban saya dari pertanyaan di atas:

Continue reading
soal pemrograman

Contoh Soal Pemrograman untuk Tes Masuk Kerja

Beberapa waktu lalu saya sempat merasakan beberapa soal pemrograman dari beberapa perusahaan dalam rangka proses mendaftar kerja (coding test). Saat ini kebanyakan perusahaan di bidang IT mewajibkan pelamar untuk mengerjakan sebuah tes membuat program. Tes ini bisa sangat tricky bagi yang tidak pernah melakukannya. Jenis soal pemrograman pada tes ini biasanya mirip dengan soal-soal pada lomba programming, contohnya seperti yang ada pada Hackerrank. Kalian bisa mencoba mengerjakannya terlebih dahulu untuk mencari tahu format soalnya.

Artikel ini diperbarui Februari 2021, dengan penambahan sebuah soal tes kerja yang dipublish di internet

Sejujurnya saya pribadi sempat merasa kaget melihat soal pemrograman yang diberikan karena ternyata tidak semudah yang saya bayangkan (you don’t say). Saya tidak tahu apakah tingkat kesulitan ini juga ditentukan dari posisi yang saya daftar atau semua pendaftar mendapat soal dengan tingkat kesulitan yang sama.

Pada artikel ini saya hanya akan menunjukkan tiga contoh soal pemrograman dari beberapa tes pemrograman untuk mendaftar kerja yang saya peroleh. Dua soal saya peroleh dari perusahaan yang pernah saya daftar (perusahaan IT skala nasional), dan satu soal saya peroleh dari internet yang sempat viral beberapa waktu lalu. Soal yang saya tulis di sini sengaja tidak saya tuliskan 100% mirip dengan soal aslinya (mungkin hanya 75% an mirip) dan saya pun tidak akan menyebutkan perusahaan mana yang memberikan soal ini.

Saya akan memposting artikel lain untuk membahas solusinya agar kalian bisa coba kerjakan terlebih dahulu untuk menguji kemampuan kalian sendiri 🙂 Selamat mencoba!

Soal Pemrograman #1

Diberikan sebuah string yang dapat mengandung huruf (kapital ataupun non-kapital) dan karakter spasi di dalamnya, ubah format string tersebut menjadi format penulisan judul dan format penulisan biasa.

Format penulisan judul menjadikan huruf pertama setiap katanya menjadi kapital sedangkan huruf lainnya tidak, sedangkan format penulisan biasa hanya menjadikan huruf pertama string menjadi kapital dan huruf lainnya tidak.

Contoh Input:

SeLamAT PAGi semua halOo

Contoh Output:

Format Judul: Selamat Pagi Semua Haloo
Format Biasa: Selamat pagi semua haloo

Soal Pemrograman #2

Bayangkan sebuah denah rumah tampak atas. Anda diberikan koordinat kartesius pojok-pojok denah rumah tersebut, terurut mengitari rumah hingga kembali ke titik semula (searah jarum jam). Outputkan luas dari rumah tersebut. Diasumsikan sisi rumah selalu sejajar dengan Sumbu X atau Sumbu Y (tidak ada sisi rumah yang miring).

Ilustrasi di bawah merupakan ilustrasi dari Contoh Input yang diberikan di bawah. Perlu diperhatikan, koordinat yang diberikan tidak selalu bermulai pada koordinat (0, 0). Pada input, baris pertama akan diinputkan banyak titik sudut bangun tersebut.

soal pemrograman geometri

Contoh Input

6
0 0
0 3
3 3
3 1
4 1
4 0

Contoh Output

10

Soal Pemrograman #3

Diberikan sebuah string yang hanya terdiri dari huruf tidak kapital. Dari depan, outputkan panjang setiap substring yang memiliki huruf yang sama. Hmm.. mungkin agak sulit penjelasannya, tapi langsung lihat contohnya saja 🙂

Contoh Input

aaabbcccaaaac

Contoh Output

a = 3
b = 2
c = 3
a = 4
c = 1

Bagaimana? ada ide untuk membuat programnya? Sekalian untuk belajar, kalian bisa coba untuk membuat programnya terlebih dahulu 🙂 sebelum lanjut membaca artikel selanjutnya yang akan membahas solusinya. Pada tes-tes yang saya ikuti, program solusi boleh dibuat dengan bahasa pemrograman apapun dan dipersilahkan untuk mengakses internet.

Jaringan Saraf Tiruan dan Deep Learning

Jaringan Saraf Tiruan (JST) adalah sebuah model pada bidang machine learning yang dibuat (dengan asumsi) menyerupai cara kerja otak manusia. Saya tambahkan di sini “dengan asumsi” karena pada nyatanya kita tidak benar-benar paham bagaimana cara kerja otak manusia.

Sebelum masuk ke detail tentang apa yang dilakukan jaringan saraf tiruan, kita flashback dulu tentang machine learning. Jadi, sama dengan algoritma machine learning pada umumnya, secara ringkas pada jaringan saraf tiruan akan terdapat tiga nilai atau variabel utama:

  • Nilai Input $X$: berisi fitur / ciri
  • Nilai Target $T$: nilai yang diharapkan pengguna
  • Nilai Prediksi $Y$: nilai yang dihasilkan JST

Machine learning bekerja dengan membuat mesin yang mampu memprediksi nilai $T$ diketahui $X$. Sebagai contoh, kita kasih $X$ adalah spesifikasi (fitur) dari suatu rumah {banyak kamar, luas, warna, dsb.} dan kita berharap machine learning dapat memprediksi harganya ($T$).

Bagaimana caranya machine learning khususnya JST dapat memprediksi harga rumah dari fitur-fiturnya? dengan belajar 🙂 JST akan melihat pola dari data-data yang dimiliki dan menggunakannya untuk menebak harganya. Sebagai contoh, kalau kita telah melihat banyak daftar spesifikasi rumah yang diketahui harganya, kita akan paham bahwa jumlah kamar dapat mempengaruhi harga, namun warna tidak. Bahkan kita bisa mengira-ngira misalnya kalau kamarnya 4-5 kira-kira harganya Rp 800jt-1M.

Pada saat proses belajar, JST akan menerima banyak nilai $X$ (spesifikasi rumah) lalu akan menebak harganya ($Y$, nilai prediksi). Tentunya awalnya nilai $Y$ ini akan bernilai acak jika dibanding harga aslinya $T$, ini karena model JST kita belum pintar. Dengan proses pembelajaran (mengenali pola), model JST akan terus memperbaiki diri agar dapat menghasilkan nilai prediksi $Y$ yang sedekat (semirip) mungkin dengan nilai target $T$.

Bagaimana JST bisa menebak harga? bagaimana JST bisa belajar?

kita mulai dari …

Neuron

jaringan saraf tiruan neuron

Di atas adalah contoh sebuah neuron (elemen terkecil pada jaringan saraf tiruan) yang menerima input $X$ dan menghasilkan nilai $Y$. Sebuah neuron adalah visualisasi dari perhitungan sederhana berikut:

$$ Y = \sigma ( X . W+ b) $$

Dengan $W$ adalah suatu nilai “bobot” (weight) dan $b$ adalah bias. Bobot dan bias ini adalah koefisien yang tidak diketahui nilainya. Biasanya akan diberi nilai awal random. Nah, yang terjadi ketika model JST belajar adalah model JST akan mengubah-ubah nilai $W$ dan $b$ sehingga menghasilkan nilai Y yang diharapkan.

Notasi $\sigma$ (sigma) menunjukkan suatu fungsi aktivasi atau disebut juga fungsi non-linear. Ada banyak fungsi aktivasi yang dapat dipilih, salah satunya fungsi aktivasi “sigmoid” yang bentuknya seperti ini:

$$ \sigma(x) = \frac{1}{1 + e^{-x}} $$

Continue reading