Published on

Review SDA - Struktur Data & Algoritma

22 min read
Authors
  • avatar
    Name
    Asfiolitha Wilmarani
    Trakteer
review mata kuliah struktur data & algoritma sda

So, uh, I’m here instead of grinding for the coming UTS. But well, since It’s April Camp anyway, let’s see how this goes. Kali ini gue mau cerita tentang SDA, matkul yang katanya paling diwanti-wanti di semester tiga. Here’s how I got through it.

Expectation vs. Reality

Pertama yang mau gue bahas adalah imej SDA di mata anak pacil, I guess. Waktu gue tanya ke beberapa orang sekitar, salah satu yang pengen mereka denger adalah ekspektasi gue terhadap SDA dan kenyataan yang terjadinya gimana.

actual death

Sebelum semester tiga dimulai, jujur gue udah stres berat. Gue denger tentang ini dan itu mengenai SDA ini, dan gimana matkul ini berhasil bikin satu angkatan jungkir balik bersama-sama. Apalagi berhubung beberapa orang deket gue adalah anak TOKI, waktu itu gue yakin banget mereka udah punya segudang preknowledge tentang matkul ini. Gue ngerasa left behind, tapi mau konsultasi tentang hal ini juga ngga berani. Respon yang gue dapet ngga jauh-jauh dari, “Tenang aja, pasti bisa lulus kok,” atau, “Litha aja bilang gitu, gimana gue entar.” (Wasn’t exactly the most helpful wkwkwk)

Yang gue inget adalah gue ngelakuin research sebelum semester baru. I guess that’s what I always do. Gue nanya ke kanan kiri, mostly kating yang gue kenal untuk minta bocoran tentang SDA. How they survived it, gimana cara grindingnya, dan apa yang harus diwaspadai. Setelah merangkum semua pengetahuan baru ini, barulah gue merasa tenang dikit. Meski info yang gue dapet bukan info terbaru, soalnya kating yang gue tanya ngambil SDA waktu masih kuliah offline.

Kenyataannya, harus gue akui, SDA emang suka bikin pengen nangis :”). More on this akan lebih banyak dibahas di section-section berikutnya. Singkatnya, rumor yang beredar tentang SDA ini kurang lebih similar in nature to that of PSD. Gue inget sebelum semester dua beredar rumor menyeramkan tentang PSD, tapi ternyata perjalanannya ngga buruk-buruk amat kok. In the case of SDA, rumor itu ada benarnya. Matkulnya emang susah. Bikin stres. Tapi dengan memanfaatkan resource dan orang-orang yang tepat, gue yakin matkul ini bisa dilewati.

Belajar Apa

On to the next point, SDA sebenernya belajar apa sih?

As the name suggests, di matkul ini gue mempelajari tentang struktur data dan algoritma. We basically learned two things by alternating the material every week or so. Materinya meliputi struktur data, termasuk array, linked list, queue, stack, bermacam-macam tree, heap, set, hash tables, graph, dan bagaimana cara memanipulasi dan memanfaatkannya.

Kalo dari algoritma, yang paling major adalah tentang sorting dan searching. Gue jadi familiar sama bubble sort, merge sort, shell sort, quicksort, dan banyak sort-sort lainnya. Di luar itu, gue belajar juga tentang backtracking, greedy algorithm, algoritma path-finding kayak dijkstra, depth-first search dan breadth-first search, and a bunch more. Supaya ada preknowledge tentang hal ini, coba pake yang gue sebutin tadi sebagai search keyword~ :D

algorithm

Materi yang dikasih berupa slides untuk satu semester yang di-upload sekaligus di awal semester, ada juga lecture video setiap minggunya (tapi yang ini ngga semua di-upload ke youtube, jadi good luck berurusan dengan video player Scele. I suggest getting a browser extension untuk nonton video 2x speed, atau bisa juga di-download dulu if you really want to), terus dosennya kadang bikin rekaman kelas sync yang ngebahas checkpoint (dibahas di section berikutnya), plus PDF soal checkpoint yang udah dicoret-coret dengan jawaban yang benar. Sebenernya ada juga forum diskusi, tapi yang berpartisipasi di sana little to none, karena dosen juga ngga pernah ngasih pertanyaan pemicu yang wajib dijawab.

Untuk resources yang gue manfaatkan, nanti gue kumpulin di section How to Grind SDA 101, ya. Keep reading~

Checkpoint

Gue ngga yakin gimana checkpoint ini dilaksanakan selama perkuliahan offline. Waktu gue ambil SDA dengan PJJ, checkpoint ini bentuknya seperti mini quiz yang diadakan setiap minggu. Checkpoint nya dibuka di hari Senin, deadlinenya hari Rabu di pekan yang sama.

Isinya adalah pertanyaan tentang materi yang dibahas di pekan itu. Soal latihan, kadang ada soal programming, seringnya soal teori. Berkisar antara 4-20 soal setiap checkpointnya. Biasanya kalo soalnya banyak, pertanyaannya berbentuk true or false atau pilihan ganda. Checkpoint ini normalnya bisa dikerjain dalam waktu setengah jam sampe satu jam.

Setelah ngerjain, nilainya langsung keluar. Soalnya juga bisa direview dan dilihat mana yang salah, tapi ngga dikasih tau jawaban benarnya. Di sesi kelas sync (waktu itu jadwal kelas sync gue ada di hari Kamisnya), soal-soal checkpoint ini dibahas. Jadi yang belum dapet full score bisa tau jawaban yang benarnya.

Honestly, checkpoint ini bisa aja dikerjain bareng-bareng. WKWKWKWKWK. Gue beberapa kali melakukan ini, diskusiin dengan orang yang lagi ngerjain juga untuk dapet jawaban yang ideal. Kadang ada yang udah submit dan udah dapet skor juga jadi bisa langsung confirmed jawaban yang benar. Kadang juga tebak-tebak berhadiah, siapa yang mau submit duluan untuk tau apakah tebakannya benar atau ngga.

Tho, ini not recommended. Do it at your own risk. The entire point of checkpoint adalah untuk menguji pemahaman lo setelah menyerap materi mingguan. Kalo checkpointnya cuma copas jawaban orang, lo nanti dapet apa?

Weekly Reflection

Selain checkpoint, task lain yang recurring secara mingguan adalah weekly reflection. Kali ini bentuknya kuesioner Scele, bukan lewat forum.

Pertanyaannya adalah, “Apa Aha! moment yang kamu alami minggu ini?” Yes. Wkwkwkwk, intinya mah ceritain apa yang dipelajari, terus bagian mana yang menarik. Selain itu ditanya juga kendala, materi yang susah, dan saran untuk keberlangsungan pembelajaran.

Deadlinenya setiap hari Jumat, dan seinget gue weekly reflection ini baru dibuka hari Kamis jam 12 siang. Kadang gue suka lupa ngisi, jadi recurring task ini gue masukkin ke weekly hub di bullet journal gue (more on this on Pacilian Productivity). Rada sayang sih kalo lupa, soalnya reflection ini masuk ke penilaian juga. I mean, why would you say no to free grades.

Bertemu Sofita-chan (Lab)

Inilah saatnya gue memperkenalkan kalian pada salah satu karakter paling iconic dalam Pacilian Universe, Sofita-chan. Well, namanya sebenernya Sofita doang, tapi temen-temen gue nambahin -chan to everything because why not.

Sofita ini adalah grader untuk tugas-tugas dan latihan pemrograman yang ada di Scele. Sebelum ini, grading untuk SDA dilakukan di Scele versi lama (Scele 2015 kalo gue ngga salah), atau di Aren (sepertinya anak KKI 2020 pake ini untuk SDA). But now, ada Sofita-chan di Scele, jadi kita ngga perlu pindah-pindah site untuk ngumpulin tugas, yeay!

Pertama kali gue dikenalin sama Sofita-chan adalah waktu Lab 0. Selama satu semester, total ada 5 kali Lab, Lab 0 sampe Lab 4. Masing-masing adalah soal programming yang menuntut kita mengaplikasikan materi yang baru dipelajari dan all sorts of miscellaneous knowledge about Java witchcraft that we’re supposed to know about, but never told about. Jadi, expect a lot of stackoverflows, geekforgeeks, javatpoint, dan baeldung; these sites will be your saviors.

tle
Untuk setiap Lab, ada sekitar 20-an testcases yang dikasih Sofita-chan. Beberapa di antaranya mudah banget untuk AC, kadang asdos juga masukkin testcase yang udah ada di soal. Jadi kalo program lo udah berhasil menangani contoh testcase yang ada di soal, harusnya kalo submit ke Sofita-chan udah bisa dapet nilai. Beberapa testcases lain kadang dibuat oleh asdos iseng yang hobi mencari-cari edge case, atau mendorong inputnya to the limit. Dengan testcases ini, lo harus bisa memastikan program lo udah memanfaatkan algoritma paling tepat supaya bisa AC.

Gue udah dua kali nyebut AC, tapi sebenernya apa maksudnya ya? Untuk kalian yang backgroundnya bukan dari competitive programming (seperti gue wkwkwk sebelum SDA gue gatau AC maksudnya apa), Sofita-chan akan ngasih verdict ke program kalian untuk setiap testcase yang dia punya. Keterangannya udah ada di Scele, but I’ll mention it here for your sake.

  • AC : Accepted.

    Ini verdict yang lo inginkan, karena artinya program lo lolos tes dan dapat nilai~ :D

  • WA : Wrong Answer.

    Basically ini cara Sofita-chan ngasih tau program lo mengeluarkan output yang ngga sesuai permintaan. Beda dengan waktu DDP, kali ini bentuk dan format output sangat berpengaruh, bahkan sampe ke spasi dan newline. Kalo salah ya salah, ga dapet nilai, gaada nilai parsial.

  • RTE: Runtime Error.

    Ini biasanya terjadi karena ada exception yang ngga terdeteksi waktu ngejalanin contoh testcase di soal. Seringnya gue dapat ini gara-gara null pointer, kadang juga gara-gara index out of bounds. Untuk debuggingnya, coba teliti lagi bagian mana yang mungkin masih prone to exceptions.

  • TLE: Time Limit Exceeded.

    Ini artinya program lo mungkin bisa jalan dan mengeluarkan output yang benar, tapi terlalu lelet untuk standar Sofita-chan. Asdos biasanya pasang time-limit sebesar 4 detik, kadang 5 detik kalo memang ada demand dari soal. Kalo program lo belum halt (mereturn atau selesai jalan) sebelum time limit itu, verdict yang keluar yang ini.

    Cara debuggingnya: cari algoritma yang lebih cepat, atau coba ganti metode output lo. Gue sering dapet TLE gara-gara print, karena katanya yang bikin lama itu I/O nya (but this is, in some ways, a hoax wkwkwk). Gue pernah terjerumus ngehajar submit ke Sofita-chan karena percaya program gue udah benar dan TLE gue disebabkan oleh I/O, hasilnya nilai gue tetep ngga naik, malah attempt gue yang habis terbuang. Pastikan dulu algoritma yang lo gunakan udah yang paling tepat, baru optimize di I/O kalo memang udah mentok.

  • SG : Program Died on a Signal.

    Konon katanya, ini terjadi karena program lo memakan terlalu banyak memori. Seinget gue, gue pernah dapet verdict ini gara-gara berusaha bikin array yang size nya terlalu gede. Selain time, Sofita-chan juga ngasih limit tentang memory yang bisa dipake sama program. Limit ini sebenernya cukup gede sampe ngga perlu lo pikirin, kecuali lo berusaha bikin array raksasa kayak gue waktu itu (kalo ngga salah 2D array sekian ratus kali sekian ratus, which is the wrong approach anyway).

  • XX : Unknown Error.

    Verdict yang ini gue ngga pernah dapet. Kalo lo suatu hari mendapat verdict ini, selamat! Lo berhasil bikin Sofita-chan bingung berkat program lo. Wkwkwk.

Oiya, Lab ini jangka waktu pengerjaannya tiga hari. Biasanya release hari Rabu siang, dan deadline nya hari Jumat malam, seperti biasa jam 23:55 waktu server Scele. Seringnya, orang-orang yang luar biasa udah AC hari Rabu sore atau Rabu malam. Orang average baru buka soal hari Kamis, hari Kamis malem mulai buka diskusi tentang penyelesaiannya. Hari Jumat adalah hari panik~ :D

Another catch nya, Sofita-chan ngga bisa melayani semua submission seenak jidat. Setiap mahasiswa cuma boleh submit maksimal 20 attempts, dan asdos ngambil nilai dari attempt yang grade nya paling tinggi. Grade ini didapat dari berapa testcase yang AC per total testcases yang ada, jadi kalo AC semua berarti 100, yeay!

Obvious tip is obvious, jangan coba-coba submit last minute karena seangkatan pasti lagi panik dan berusaha menjejalkan program mereka ke Sofita-chan. Ada dua hal yang likely akan terjadi: Scele down, atau submission lo jadi telat. :)

Ngomong-ngomong, Sofita-chan ini iconic enough sampe salah satu temen gue bikin sticker line yang booming banget seantero angkatan Maung dan kalangan asdos kating. Bahkan ada dosen yang notice juga. Cekidot, Sofita-chan by ansqee. Sayangnya, dia ngga dapet revenue dari penjualan sticker line ini, ada masalah dengan terms si line creator studio or something. So, if you like her work, consider getting her some cendol over on trakteer~

(Or, if you like my writing, consider getting me some choco lattes over there as well O^O) Wkwkwk

Kisah Hidup Izuri (TP)

Sekarang kita memasukki bagian yang berhasil bikin orang-orang nangis. Meet Izuri, petani boba yang tinggal di kota Naga.

Selama satu semester ada dua TP. Hah, cuman dua? you might ask. Well, I bet you don’t know what you’re talking about, child. :) Kalo lebih dari itu, satu angkatan beneran bisa dead semua.

Jadi, apa sebenernya yang membedakan Lab dan TP? Kenapa TP ini that much more menakutkan? Well, for one, kalo testcase untuk Lab ada 20-an, testcase untuk TP ada 100. One test for one point of grade. Kedua, requirements TP jauh lebih banyak. Kalo untuk Lab hanya perlu satu atau dua algoritma yang diimplementasi, soal TP menuntut gue mengimplementasikan 4 sampe 5 algoritma sekaligus, masing-masing untuk satu fitur requirement yang diminta.

Jangka waktu pengerjaannya mirip kayak TP waktu DDP, sekitar dua minggu. Bedanya, scope TP SDA ini a whole new level. Butuh waktu lama untuk memahami soal, belum lagi nyoba membayangkan implementasi algoritma apa yang bisa dipake untuk menyelesaikan masalah si Izuri. Ditambah lagi debugging dan berurusan sama verdict Sofita-chan yang tak kenal ampun.

Oiya, gue belum memperkenalkan kalian pada Izuri. Jadi untuk dua TP dalam satu semester itu, ada recurring character yaitu si Izuri.

boba tree eww

Di TP1, beliau ini adalah seorang petani boba yang punya ladang boba dan keranjang ajaib. Kita ditugaskan jadi babu yang bisa disuruh ke pasar untuk jual dan beli keranjang ajaib, plus panen boba di ladang. Anehnya, setelah sekian banyak boba reference yang dipake dalam soal TP1 ini, gue masih ngga eneg tuh dengan boba. WKWKWKWK, malah makin doyan. (aduh Lith, puasa). Well, this was how boba became the new donat. (FYI, donat duarr! originally adalah soal TP untuk SDA Quanta, makanya donat sempet viral juga).

Di TP2, Izuri mau jalan-jalan keliling Kota Naga untuk jajan odading. Tapi jalannya punya curfew, dia akan tutup di waktu kesekian. Terus ada kupon-kuponan juga. Pokoknya di TP ini, Izuri adalah makhluk kepo yang akan mengajukan beragam pertanyaan dan kita harus bisa menjawab semuanya dalam output program yang dibuat.

Tips untuk pengerjaan TP, yang paling berpengaruh bagi keberlangsungan TP gue adalah memanfaatkan asdos. Seriously, mereka ada di sana untuk dimanfaatkan! Jujur gue rada menyesal gue baru menyadari hal ini setelah gue sendiri jadi asdos, but it’s true. Minta bantuan ke asdos bukan sesuatu yang bikin lo harus minta maaf. Why? Karena semua senang, asdos dapet log, lo dapet pencerahan tentang solusi TP.

Asdos juga punya slot yang tersembunyi dari mahasiswa untuk submit ke Sofita-chan. Pernah di saat-saat terdesak, submission attempt gue cuma tersisa satu dan grade gue belom 100. Gue minta tolong ke asdos gue untuk memastikan apakah update terbaru yang gue bikin udah AC atau belum. Beliau (dengan sangat baik hati), submit file gue ke Sofita-chan lewat slotnya, dan ngasih tau kalo versi yang itu AC.

Dengan deg-degan gue submit file ke Sofita-chan, attempt ke-20. TERUS BENERAN AC~! HORE! HAHAHAHAHAH

20/20 attempts

(Ini sejarahnya bisa sampe attempt ke-20 adalah karena gue hajar submit, percaya program udah sepenuhnya bener dan kena TLE gara-gara I/O. Ternyata emang ada algoritma sorting yang harus gue benerin dulu, bukan gara-gara I/O nya.)

So, yeah. Manfaatkan asdos. Kalo punya asdos jangan dicuekin.

UTS

UTS SDA, I think I flopped it. Yeah, I flopped it.

Jadi ada tiga sesi, sesi pertama pilihan ganda. Bentuk soalnya hampir persis sama kayak soal checkpoint, so no problems there. Gue juga dapet lumayan banyak latihan soal dari UTS tahun lalu dari asdos dan temen-temen yang resourceful.

Sesi kedua ada essay. Essaynya ngga ditulis tangan, diketik. Ada bagian isian singkatnya juga. Tapi soalnya nguli, so if you got some typing speed, that will come in handy. Seinget gue, gue ngga terlalu bermasalah di sesi ini.

Problemnya adalah di sesi ketiga, sesi programming. Sesi programming ini terbagi jadi tiga soal, masing-masing punya timeframe sendiri. Singkat cerita, dari tiga soal programming, gue cuma berhasil dapet nilai di satu soal aja. Itupun ngga full score. Not even half score wkwkwk. Dua sisanya, gue dikasih telur rebus sama Sofita-chan :”))

prograahming

Setelah UTS itu, gue udah mulai berusaha adapt yaudahlah-mindset. Tapi, meskipun berusaha ngga memikirkan tentang itu lagi, gue tetep nguping sana-sini dong. Rupanya yang flop UTS ngga gue aja, orang-orang sekitar gue juga jedukkin kepala. Malah ada temen gue yang big brain dan ngga nulis algoritma apa-apa, tapi langsung ngeprint output yang ada di contoh testcase soal supaya at least dapet nilai.

UAS

As for UAS, I came prepared. Berhubung gue udah jatuh di UTS, untuk UAS, I prepped for REVENGE. Ini ada hubungannya juga sama new year’s productivity boost yang gue bahas di Review Semester Tiga. In short, karena udah tau apa yang harus gue ekspektasikan di ujian, I grind. Gue ngerjain soal UAS tahun lalu, sendiri at first, terus nyari temen untuk cocokkin jawaban. Selain itu, gue juga grinding untuk sesi programming.

Plan nya sih waktu itu gue ngerjain dua soal programming sehari, but that kinda failed wkwkwk. Pada akhirnya gue baru mulai grinding ngerjain soal beberapa hari sebelum hari ujian, jadi ngga semua materi kecover. But it turned out to be enough.

Bahkan waktu ujian, gue cukup beruntung karena bisa reuse code yang gue tulis untuk ngerjain soal latihan waktu grinding. Jadi proses debugging dan lain-lainnya lebih cepet karena gue ngga perlu mikirin logic dari nol lagi. :D It was so worth it.

Kali ini karena lebih percaya diri dengan hasil sesi programming, gue tinggal pasrah gimana hasil bagian pilihan gandanya. As it turns out, it was good enough. :D

Revenge gue berhasil, nilai UAS nya berhasil menutupi kejatuhan gue di nilai UTS, yeay!

How to Grind SDA 101

Now, ladies and gentlemen and people, the moment you’ve been waiting for. Gue mau merangkum resources dan metode grinding gue untuk SDA, if this will help anyone at all.

Brainstorm dengan study group

Kecuali lo merasa jadi bagian dari < 1% makhluk luar biasa di pacil, gue rasa tip ini harus banget diamalkan. Pengerjaan Lab dan TP itu pada dasarnya hampir mustahil untuk dikerjain sendirian (kecuali oleh makhluk luar biasa yang gue sebut-sebut), jadi alangkah baiknya kalo lo assemble study group favorit lo dan ngomongin tentang ide implementasi. Akan semakin ideal kalo study group lo beranggotakan satu atau lebih makhluk luar biasa yang bisa bagi-bagi petuah.

Ide implementasi yang gue maksud di sini bukan serta merta bagi-bagi source code. Bentuk ide yang dibagiin adalah either step-by-step flow program dalam bahasa manusia, pseudocode kalo emang udah jelas banget, ataupun diagram dan tabel yang mungkin bisa membantu.

Trust me, punya teman di masa SDA itu sangat krusial. Kalo bisa lulus sama-sama, kenapa engga?

together

Manfaatkan asdos

I cannot stress this enough, manfaatkan keberadaan asdos. Di kala sulit, asdos gue kadang mengadakan asistensi khusus untuk konsultasi Lab ataupun TP. Sesinya mostly diem-dieman, tapi sangat berguna bagi orang-orang yang udah mentok seperti gue.

Kalo asdos lo nanti ngga berinisiatif mengadakan asistensi, coba approach duluan. Mereka biasanya lumayan responsif bales chat yang mintain hint kok.

Kadang asdos bisa ngasih general idea tentang bagaimana cara penyelesaian problem set nya, dengan cara vague yang rasanya ngga membantu. Padahal, kadang itu udah kunci jawabannya :”)) Asdos juga bisa membantu lo di saat kepepet (seperti kalo misal submission slot udah mau habis). Tapi untuk yang ini, pastikan lo memanfaatkan submisi lo baik-baik dulu. Terus jangan lupa berterima kasih. Dengan heboh.

makasih asdos <3

Inti dari dua poin pertama ini sebenernya adalah manfaatkan orang lain. Kedengeran ngga bagus memang, tapi seperti petuah pendahulu yang beredar turun temurun: lo ngga bisa hidup sendirian di pacil.

Alghijudge

Alghijudge ini adalah grader DIY yang dibuat oleh ka Alghi dari Quanta. Tadinya dimanfaatkan untuk membantu anak-anak Quanta yang belum berhasil AC di semua testcase untuk TP. Oleh temen-temen gue dari Akademis Maung, Alghijudge di-repurpose untuk melayani Maung. Kali ini, karena pengerjaan Lab adalah sekitar tiga hari, kami juga bikin testcases tambahan untuk Lab. Jadi baik Lab maupun TP ada testcase nya di Alghijudge Maung.

Kalo angkatan lo belum ada yang aware tentang hal ini, coba liat-liat repository Alghijudge dan fork untuk SDA angkatan lo. It really does help, apalagi dalam tahap debugging dan stress karena Sofita-chan terus-terusan ngasih verdict tak terduga.

  • Link repository original Alghijudge: [frontend] [backend]
  • Link repository Alghijudge Maung: [frontend] [backend] (Alghijudge Maung punya fitur tambahan yaitu nampilin CPU time yang dipake program untuk jalan. Kadang useful untuk tau seberapa cepat program lo, tapi kadang ngga akurat.)

Ideone

Melanjutkan poin terakhir tadi tentang CPU time, kadang debugging untuk TLE adalah yang bikin pengen jedukkin kepala ke tembok. Untuk tau versi program yang mana yang lebih cepat, gue memanfaatkan Ideone.

Ideone ini basically sama seperti Alghijudge, online compiler, bedanya tanpa ada testcase khusus untuk Lab atau TP, tapi dengan pengukuran CPU time yang lebih akurat. Gue biasanya hajar run program gue di sini berkali-kali untuk liat versi I/O mana yang paling cepat. Perbedaan 0.01 detik aja udah sangat signifikan. Jadi daripada gue buang-buang attempt dengan Sofita-chan, Ideone ini gue jadikan semacam tryout nya dulu.

Saran gue, siapin testcase yang kira-kira akan memakan waktu cukup lama untuk diproses. Misalnya maksimalin input supaya mentok dengan batasan yang ada di soal. Sayangnya, input Ideone punya batasan tersendiri, 60KB kalo ngga salah. Jadi intinya mentokkin aja sampe salah satu udah mentok. Dengan begitu, lo bisa dapet CPU time yang paling lama yang bisa lo dapatkan, dan setiap update (kalo memang bener berhasil mempercepat program) akan lebih keliatan seberapa besar perubahannya.

Hackerrank + Leetcode

Dua website ini adalah yang gue manfaatkan untuk grinding UAS. Seperti yang gue ceritain sebelumnya, waktu UAS gue lucky enough untuk bisa reuse code yang udah gue tulis sewaktu latihan. Jadi, semakin banyak lo latihan ngerjain soal di website-website seperti ini, lucky chance itu akan semakin besar.

Ada banyak lagi sebenernya website untuk latihan coding SDA, hackerrank dan leetcode cuma dua di antaranya. Selain itu, ada codeforces, codingbat, dan BANYAK lagi coding challenge di luar sana yang bisa diikuti kalo lo meluangkan waktu.

Scratchpad, Visualgo, and other kinds of visualization tools

Ini akan sangat berguna mulai saat materi tree. Punya scratchpad atau sesuatu yang bisa dicoret-coret dan dilihat akan membantu lo membayangkan si struktur data secara visual. Akan lebih berguna lagi waktu udah materi graph. Kalo itu, menurut gue mau ngga mau emang harus digambar supaya kelihatan.

Visualgo adalah website yang SANGAT berguna dan OP untuk visualisasi struktur data. Dia juga punya visualisasi untuk sorting algorithm, dan malah bisa dijadiin semacam simulasi. Masukkan elemen-elemen struktur datanya, jalankan sort, et voila! Animasi sortingnya jalan. Manfaatkan site ini untuk memahami sorting dan membantu lo di checkpoint dan semacamnya.

Another thing yang agak tricky untuk dihandle adalah AVL tree. Seinget gue di visualgo ada batasan tertentu untuk elemen dalam tree nya, jadi gue ngga bisa memanfaatkan visualgo untuk hal-hal tertentu. Untuk itu, gue pake AVL tree simulator ini. Sangat handy untuk membantu ngerjain checkpoint dan ujian kalo waktunya cukup. More so untuk memeriksa apakah balancing nya sudah benar, karena untuk tree yang gede banget, gue kesusahan dan kelamaan mikirin balancing nya.

William Fiset’s Github

Ah, Mister William Fiset, the savior of all mankind (and CS students in particular). Beliau ini punya dua repository yang ajaib yang bisa membantu lo wrap your head around SDA.

Repository pertama, Data Structures, berisi implementasi struktur-struktur data yang kita pelajari. Useful untuk dijadikan referensi waktu ngerjain checkpoint atau Lab.

Repository yang kedua, Algorithms, berisi, well, algorithms. Self-explanatory lah ya. Berkisar di graph theory algorithms, termasuk path-finding, dijkstra, DFS, BFS, dll. Use it accordingly, dan kalo beneran dijadikan referensi, jangan lupa tulis sumbernya ya!

Youtube resources

Honestly, youtube is your best friend. Ada banyak rekomendasi playlist dan video yang bisa gue bagikan karena memang beneran gue pake dan manfaatkan selama berkutat dengan SDA. I’ll list them by category.

Course Overview

Great videos kalo mau grind sebelum semester dimulai. Lengkap banget.

Graph Theory

Sorting

  • Algorythmics - banyak video menarik tentang sorting, basically visualisasi algoritma sorting dalam bentuk tarian. Very cool.

Reflection & Conclusion

Matkul ini gue rasa bukan matkul yang bisa di-survive sendiri. Memang perlu bantuan dan dukungan dari temen-temen dan orang terdekat, dari angkatan kalo perlu. Gue ngga kebayang kalo harus ngambil SDA ngga bareng angkatan gue.

Googling was also my best friend. Banyak banget soal pemrograman yang mengharuskan gue untuk berpikir out of the box karena implementasinya bukan sesuatu yang bisa gue temukan di stackoverflow. Pasti ada elemen yang iseng ditambahin supaya algoritma basic nya harus di-modify. It’s always modified. Modified knapsack, modified dijkstra, modified BFS, and a bunch more :”)). Jadi meski matkul ngoding, SDA ini juga menuntut kreativitas dan critical thinking, I guess.

Tapi, gue harus jujur juga. Di luar semua stress yang ditimbulkan, terkadang gue masih merasa matkul ini seru banget. I take my challenges and problem solving very seriously, jadi berurusan dengan Sofita-chan dan penyelesaian soal itu kadang terasa seperti puzzle yang harus dipecahkan. And I like my puzzle. Euforianya datang ketika dapat verdict AC semua dan grade 100 dari Sofita-chan. Sometimes it feels awesome, but other times, it’s just “Please just get this over with, I haven’t slept in two days..” kind of relief. :”))

Beban mental yang datang bersama matkul ini juga ngga sedikit. Kalo udah ada Lab atau TP yang released, gue mau ngga mau mengalokasikan sekian persen brainpower gue untuk mikirin solusi selama Lab atau TP gue belum selesai. Seringnya, kalo Lab atau TP belum selesai, gue ngga bisa mengerjakan tugas lain. Ini yang rada bahaya. Karena kadang ada tugas lain yang deadline nya lebih deket, tapi gue malah ngerjain TP dulu karena bebannya yang lebih berat di pikiran. Time management nya jadi amburadul. Tapi kalo mau ngerjain tugas lain pun, pikiran gue masih kebagi. Jadi saat itu, gue memilih untuk nyelesaiin yang berat dulu biar gue punya lebih banyak brainspace untuk nanti dipake ngerjain tugas lain.


Gue rasa itu dulu yang bisa gue sampaikan. Semoga resource dan insightnya berguna wkwkwk. Sering-sering semangatin orang terdekat lo kalo lagi ngambil matkul ini. Ngga ada yang tau kapan ternyata dia lagi mojok nangis sendirian gara-gara gabisa ngerjain TP. Also, I’m on trakteer~ (WKWKKWWK another shameless plug)

See you on the next one~