Anda di halaman 1dari 30

Pembahasan Soal Informatika

1. Suatu hari, Adit sedang bosan dengan permainan catur yang ia mainkan. Sehingga ia
mencoba membuat permainan lain. Ia akan memindahkan kuda pada papan catur berukuran
8x8 dari ujung kiri bawah papan hingga ujung kanan atas papan. Fyi, pergerakan papan catur
pada kuda digambarkan melalui gambar berikut.

Dengan K adalah lokasi mula – mula tempat kuda diletakkan. Adit pun bertanya – tanya,
berapakah langkah minimal yang diperlukan bidak kuda untuk bergerak dari ujung kiri
bawah papan menuju ujung kanan atas papan catur?

A. 5
B. 6
C. 7
D. 8
E. 10

6
Solusi 6
Cara paling mudah adalah dengan
menyimulasikan pergerakan kuda dari kotak
paling pojok kiri bawah menuju pojok kiri 4
atas. Sehingga nantinya pergerakan kuda
3 5
akan menjadi seperti berikut

1
Deskripsi untuk soal berikut akan digunakan untuk 3 soal berikutnya
Adit memiliki hobi bermain catur. Saking seringnya bermain catur, rating di chess.com-nya
mencapai sekitar 1300 poin. Tetapi, itu menjadi boomerang baginya karena bermain catur
lama – kelamaan membuatnya bosan. Sehingga, ia pun sekarang bermain catur dengan
meletakkan banyak bidak benteng pada papan catur. Pada catur, benteng dapat menyerang
petak – petak berikut.

Dengan B adalah lokasi bidak benteng dan petak biru adalah petak serang benteng.
2. Lalu Adit pun bertanya, apabila ia memiliki papan catur berukuran 2x2, ada berapa
konfigurasi pemasangan 2 benteng pada papan catur agar bidak – bidak itu tidak saling
serang?
A. 1
B. 2
C. 3
D. 4
E. 5

Solusi 2

Hal ini bisa dilakukan dengan mencoba – coba semua kemungkinan. Berikut adalah
kombinasi pemasangan benteng yang valid (dengan kotak kuning adalah lokasi pemasangan
benteng)

3. Apabila ia memiliki papan catur berukuran 4x4, ada berapa konfigurasi pemasangan 4
benteng pada papan catur agar bidak – bidak itu tidak saling serang?
A. 9
B. 16
C. 24
D. 6
E. 32
4. Apabila ia memiliki papan catur berukuran 8x8, ada berapa konfigurasi pemasangan 8
benteng pada papan catur agar bidak – bidak itu tidak saling serang?
A. 900
B. 3280
C. 720
D. 40600
E. 40320

Untuk soal 3 dan 4, tentu akan cukup sulit jika haru mencoba – coba semua kemungkinan

pemasangan benteng. Sehingga kita perlu mencari cara yang lebih mudah dalam memasang
benteng.

Perhatikan pada soal ketiga. Apabila kita ingin memasang benteng pertama kita, maka kita memiliki
4 opsi pemilihan kolom dan baris yang aman dari serangan benteng manapun. Sehingga terdapat 4
kemungkinan pemilihan. Jumlah kolom dan baris aman dari serangan benteng pun berkurang satu.

Kemudian, ketika ingin memasang benteng lagi, kita memiliki 3 opsi pemilihan kolom atau baris yang
aman dari serangan benteng. Sehingga ada 3 opsi pemilihan tempat pada benteng kedua.

Setelah benteng kedua dipasang, sisa opsi pemilihan baris dan kolom hanya ada 2. Sehingga hanya
ada 2 opsi pemilihan baris dan kolom yang valid.

Terakhir, setelah 3 benteng terpasang, benteng terakhir hanya memiliki 1 opsi pemilihan tempat
yang valid. Sehingga solusi akhir kita adalah 4 x 3 x 2 x 1 = 4! = 24

Pada pemasangan pertama ada 4 baris / kolom yang aman dari serangan
benteng

Pada pemasangan kedua, ada 3 baris / kolom yang aman dari serangan
benteng

Pada pemasangan ketiga, ada 2 baris / kolom yang aman dari serangan
benteng
Pada pemasangan keempat, hanya satu baris / kolom saja yang aman dari
serangan benteng.

Sehingga, untuk soal 4, kita bisa menggunakan trik yang sama dengan soal 3. Sehingga solusi akhir
kita adalah 8! = 40320

5. Ada berapakah permutasi yang valid dari kata THEO?


A. 24
B. 16
C. 12
D. 14
E. 4

Permutasi ini dapat menggunakan rumus permutasi biasa. Dalam membuat sebuah kata
dengan 4 huruf berbeda, maka rumusnya adalah 4! = 24

6. Ada berapakah permutasi yang valid dari kata BEBEK?


A. 30
B. 60
C. 120
D. 24
E. 240

Permutasi ini dapat diselesaikan dengan menggunakan rumus permutasi elemen yang sama.
Untuk membuat kata dengan panjang 5 dan pilihan huruf BEBEK, maka solusinya adalah
5!
= 60
2! 2!
Mengapa dibagi 2! * 2!? Dikarenakan ada 2 huruf B dan 2 huruf E. Perhatikan bahwa kata
B1E1B2E2K dan B2E1B1E2K adalah 2 kata yang sama

7. Ada berapakah permutasi yang valid dari kata GEPREKBABE?


A. 302400
B. 604800
C. 3628800
D. 72040
E. 605600

Dengan menggunakan solusi yang sama seperti di atas, maka persoalan dapat
diselesaikan dengan solusi
10!
= 302400
3! 2!
Berikut potongan kode untuk 2 soal berikutnya
long long glhf(long long n){
long long glgl = 1;
for(long long i = 1; i <= n; i++){
glgl *= i;
}
return glgl;
}

long long woles(long long n){


bool apatuch = 1;
if(n % 2 == 0) n++;
long long sans = 1;
for(long long i = n; i >= 1; i--){
long long aww = glhf(i);
if(apatuch) sans *= aww;
else sans /= aww;
apatuch = (apatuch + 1) % 2;
}
return sans;
}

8. Berapakah hasil pemanggilan dari fungsi woles(5) ?


A. 15
B. 20
C. 25
D. 30
E. 100

Kunci dari menyelesaikan persoalan membaca kode adalah menyederhanakan suatu


fungsi. Mari kita cari tahu maksud dari fungsi glhf(n)

Jika diperhatikan, ketika diberi bilangan N, fungsi ini akan membuat perulangan dari 1
hingga N. Setelah itu, fungsi akan mengalikan variabel glgl dengan bilangan 1
hingga N dan mengembalikan nilainya. Sehingga dapat disimpulkan bahwa fungsi
glgl(n) mengembalikan nilai dari N!

Setelah itu mari kita bedah fungsi woles(n)!

Perhatikan bahwa dia memulai perulangan dari N menuju 1. Setelah itu, ia membuat
variabel sans sebagai penampung jawaban. Di setiap langkah, ia membolak – balikkan
nilai apatuch menjadi nyala dan mati secara bergantian. Ketika menyala, nilai dari
sans akan kalikan dengan N!. Sementara ketika mati, akan dibagi dengan N!. Selain itu,
nilai dari sans akan menyala apabila N ganjil.

Sehingga, persamaan hasil dari fungsi woles adalah sebagai berikut


5! 3! 1! 5.4! 3. 2! 1!
= = 5 . 3 . 1 = 15
4! 2! 4! 2!
9. Berapakah hasil pemanggilan dari fungsi woles(9) ?
A. 90
B. 15
C. 120
D. 945
E. 720

Sementara untuk soal 9, akan didapat persamaan berikut


9! 7! 5! 3! 1! 9.8! 7.6! 5.4! 3. 2! 1!
= = 9 . 7 . 5 . 3 . 1 = 945
8! 6! 4! 2! 8! 6! 4! 2!

10. Berapakah hasil dari 72023 mod 100?


A. 1
B. 7
C. 49
D. 43
E. 77

Karena kita mencari nilai dari 72023 mod 100, berarti sama saja dengan kita mencari nilai
puluhan dari 72023

Hal ini dapat dengan mudah kita lakukan apabila kita mencari pola dari perkalian angka 7 ini

71 mod 100 = 7

72 mod 100 = 49

73 mod 100 = 43

74 mod 100 = 1

75 mod 100 = 7

Ternyata, pola dari perpangkatan angka 7 ini akan berulang setiap 4 kali. Sehingga kita hanya
perlu mencari sisa bagi dari 2023 dengan 4.

2023 mod 4 = 3

Maka angka puluhan dari 72023 mod 100 = 73 mod 100 = 3


11. Ada berapa bilangan 3 digit kurang dari 1000 yang hanya terdiri dari bilangan ganjil saja?
A. 125
B. 1000
C. 250
D. 500
E. 100

Dalam membuat bilangan 3 digit, kita memerlukan 3 angka berbeda. Dalam setiap angkanya,
kita memiliki opsi untuk memilih 5 bilangan ganjil berbeda (1, 3, 5, 7, 9). Sehingga, solusi
akhir dari soal ini adalah 5 x 5 x 5 = 125 bilangan

12. Ada berapa bilangan asli kurang dari 1000 yang habis dibagi oleh 5 tetapi tidak habis dibagi
3?
A. 199
B. 133
C. 66
D. 33
E. 120

Soal ini dapat diselesaikan dengan prinsip inklusi eksklusi


Mula – mula, kita perlu mencari berapa banyak bilangan asli kurang dari 1000 yang habis
dibagi 5. Solusi dari masalah ini adalah 999 / 5 = 199
Kemudian, untuk mencari bilangan asli kurang dari 1000 yang habis dibagi 5 dan tidak habis
dibagi 3, kita cukup mencari bilangan asli yang habis dibagi 5 dan 3 (habis dibagi 15) dan
menggunakan hasilnya untuk mengurangi angka 199 di atas. Mengapa bilangan yang habis
dibagi 5 dan 3 ekuivalen dengan bilangan yang habis dibagi 15? Karena 15 merupakan kpk dari
5 dan 3.
Sehingga, bilangan yang habis dibagi 15 dari 1 sampai 999 adalah 999 / 15 = 66
Sehingga, solusi akhir kita adalah 199 – 66 = 133
13. Gubernur Provinsi Pingit yang bernama Wafdan merupakan Gubernur orz. Kota – kota di
provinsi Pingit terdiri dari beberapa kota. Tiap kota merupakan salah satu dari pembangkit
listrik (yang ditandai dengan warna putih) dan kota yang tak bisa menghasilkan listrik (ditandai
warna hitam). Terdapat beberapa kabel listrik yang menghubungkan antar beberapa pasang
kota yang ada. Apabila Wafdan ingin menggunakan kabel ini untuk menghubungkan listrik
antar dua kota, maka ia harus mengeluarkan biaya sesuai dengan yang tertera pada kabel.
Berikut peta dari Provinsi Pingit milik Wafdan

6
6

5
9
3 7
4
7
10
7
6 11
2 8

4 11

Suatu hari, provinsi miliknya mengalami mati lampu. Untuk itu, ia berinisiatif untuk
menyelamatkan provinsinya. Untuk menyelamatkan satu provinsi, ia harus menghubungkan
tiap kota yang bukan pembangkit listrik ke minimal satu kota pembangkit listrik yang ada
dengan kabel – kabel di provinsi itu. Sekarang ia bertanya, berapakah biaya minimal yang ia
perlukan untuk menyelamatkan Provinsi Pingit?
A. 27
B. 30
C. 34
D. 42
E. 44

Soal ini merupakan salah satu masalah klasik dari Minimum Spanning Tree. Kita dapat
menjalankan algoritma kruskal sebagai berikut.

1. Anggap semua jalan tidak terpakai


2. Urutkan semua jalan dari yang paling murah hingga paling mahal
3. Kemudian, iterasi dari jalan paling murah
4. Selama jalan itu menghubungkan 2 kota yang sama sama tidak terhubung listrik,
gunakan jalan itu. Jika tidak jangan pakai.
5. Iterasi semua jalan hingga semua kota terhubung oleh setidaknya satu kota penghasil
listrik. Sehingga kurang lebih beginilah peta akhir
6

5
7

10

Sehingga total biaya minimum yang diperlukan adalah 5 + 2 + 4 + 6 + 7 + 10 = 34

14. Berapakah keluaran dari program berikut?


int awik[5] = {1, 4, 6, 9, 10};
int awok[5] = {3, 5, 2, 1, 9};

int awikawok(){
int kurakura = 0, kurikuri = 0;
for(int a = 0; a < 5; a++){
kurakura += (awik[a] * awok[(a + 1) % 5]);
}
for(int a = 0; a < 5; a++){
kurikuri += (awok[a] * awik[(a + 1) % 5]);
}
int res = kurakura - kurikuri;
if(res < 0) res = res * -1;
return res;
}

A. 45
B. 2160
C. 51
D. 60
E. 900

Untuk menjawab soal ini, hanya perlu menjalankan saja program pada soal. Sehingga,

kurakura = (1 x 5 + 4 x 2 + 6 x 1 + 9 x 9 + 10 x 3) = 130

kurikuri = (3 x 4 + 5 x 6 + 2 x 9 + 1 x 10 + 9 x 1) = 79

res = kurakura – kurikuri = 130 – 79 = 51


Tambahan: algoritma di atas adalah algoritma shoelace theorem untuk mencari luas bangun
datar pada bidang kartesius 2D jika yang diketahui pada bidang itu hanyalah titik koordinat
sudut – sudutnya.

15. Suatu hari, Alan yang merupakan seorang kurir ingin menghantarkan 12 paket dari toko
menuju ke rumah – rumah warga. Dalam sekali pengantaran, ia bisa menghantarkan 1 atau
3 paket sekaligus. Sekarang, ia bertanya, ada berapa konfigurasi pengiriman paket berbeda
yang mungkin baginya untuk menghantarkan semua paket? Salah satu contoh konfigurasi
pengantaran adalah 3 -> 3 -> 1 -> 1 -> 3 -> 1 dimana ia mula mula menghantarkan 3 paket,
lalu 3 paket, 1 paket, 1 paket, 3 paket, dan mengakhiri pengantaran dengan menghantar 1
paket lagi.

A. 27
B. 30
C. 60
D. 62
E. 15

Permasalahan di atas dapat diselesaikan dengan dynamic programming. Definisikan


DP[x] adalah banyak cara menghantarkan X paket. Basis dari DP ini adalah DP[0] = 1. Hal
ini dikarenakan hanya ada 1 cara untuk menghantarkan 0 paket yaitu dengan tidak
menghantarkan apa – apa.
Lalu untuk transisi, DP[x] = DP[x - 1] apabila x < 3, dan DP[x] = DP[x - 1] + DP[x - 3] apabila
x >= 3. Hal ini dikarenakan untuk menghantarkan x paket, kita dapat mencari cara untuk
menghantarkan x – 1 paket dan menghantarkan 1 paket lagi, atau mencari cara
menghantarkan x – 3 paket lalu menghantarkan 3 paket lagi.
Sehingga jika dibuat tabel akan menjadi seperti ini

X 0 1 2 3 4 5 6 7 8 9 10 11 12
DP[x] 1 1 1 2 3 4 6 9 13 19 28 41 60

Sehingga jawaban akhir kita adalah DP[12] = 60

16. Diberikan sebuah peta yang terdiri dari beberapa kota dan jalan. Mula – mula, Mikail berada
di kota A dan ingin berjalan – jalan secara bebas melalui jalan – jalan yang ada. Dalam satu
langkah, ia bebas pergi dari suatu kota memilih kota mana saja yang menjadi tujuannya
asalkan ia dapat menuju kota itu hanya dengan melewati tepat satu jalan. Sekarang ia
bertanya – tanya, ada berapa konfigurasi kemungkinan pemilihan rute yang dapat digunakan
untuk bergerak dari kota A ke kota D dalam tepat 7 langkah? 45 langkah

D
B

C
A. 23
B. 45
C. 114
D. 15
E. 90

Permasalahan ini dapat diselesaikan dengan prinsip Dynamic Programming.


Definisikan
A[x] adalah banyak cara bergerak dari A menuju A dalam x langkah
B[x] adalah banyak cara bergerak dari A menuju B dalam x langkah
C[x] adalah banyak cara bergerak dari A menuju C dalam x langkah
D[x] adalah banyak cara bergerak dari A menuju D dalam x langkah

Kemudian, untuk basisnya,


A[0] = 1 karena ada 1 cara bergerak dari A menuju A dalam 0 langkah
B[0] = 0 karena ada 0 cara bergerak dari A menuju B dalam 0 langkah
C[0] = 0 karena ada 0 cara bergerak dari A menuju C dalam 0 langkah
D[0] = 0 karena ada 0 cara bergerak dari A menuju D dalam 0 langkah

Lalu untuk transisi-nya


A[x] = B[x - 1] + C[x - 1] + D[x – 1] Karena untuk bergerak ke A dalam x langkah, kita
bisa bergerak ke B / C / D dalam x – 1 langkah, kemudian bergerak ke A setelahnya
B[x] = A[x - 1] + C[x - 1] Karena untuk bergerak ke B dalam x langkah, kita bisa
bergerak ke A / C dalam x – 1 langkah, kemudian bergerak ke B setelahnya
C[x] = A[x - 1] + B[x - 1] ] Karena untuk bergerak ke C dalam x langkah, kita bisa
bergerak ke A / B dalam x – 1 langkah, kemudian bergerak ke C setelahnya
D[x] = A[x - 1] ] Karena untuk bergerak ke D dalam x langkah, kita bisa bergerak ke A
dalam x – 1 langkah, kemudian bergerak ke D setelahnya

Sehingga, cukup jalankan saja DP-nya hingga kita mendapatkan hasil dari D[7] = 45

17. Aku adalah sebuah bilangan. Jika dibagi 8, maka aku bersisa 5. Jika dibagi 7 aku bersisa 3.
Berapakah aku?
A. 13
B. 18
C. 69
D. 24
E. 51

Diketahui

𝑥 = 5 𝑚𝑜𝑑 8
𝑥 = 3 𝑚𝑜𝑑 7
Kita dapat menggunakan prinsip mencoba – coba solusi.

Kita bisa mencoba – coba bilangan dari 5, 13, 21 dst hingga bilangan yang bersisa 3 apabila
dibagi 7. Kita hanya perlu mencoba bilangan dari 5, kemudian ditambah 8 (13), lalu ditambah
8 lagi (21) dst. Hingga nanti jawaban akhir kita adalah 69.
18. Jika a, b, c, d, e adalah bilangan – bilangan asli (1, 2, 3, ...) dan diketahui pula bahwa a x b x c
x d x e = 780 dan a x b = 20. Ada berapa konfigurasi a, b, c, d, e yang valid?
A. 10
B. 54
C. 24
D. 70
E. 34

Kita dapat membagi masalah ini menjadi 2 kasus

Karena ab = 20, maka cde = 780 / 20 = 39

Faktorisasi prima dari 20

20 = 22 . 5

Banyak faktor = 3 . 2 = 6

Ada 6 cara mencari kemungkinan ab -> kita bisa langsung menebak ini dikarenakan ab hanya
terdiri dari 2 angka (a dan b)

Kemudian, faktorisasi prima dari 39 adalah 3 . 13

Ada berapa cara memasukkan nilai 3 dan 13 ke 3 bilangan berbeda? Ada 6 cara. Hal ini karena
angka 13 punya 3 opsi (sebagai faktor dari c, d, atau e) dan 3 punya 3 opsi (yaitu sebagai faktor
c, d, atau e juga). Sehingga banyak cara adalah 3 x 3 = 9

Sehingga, jawaban akhir adalah

= banyak cara konfigurasi ab . banyak cara konfigurasi cde

=6.9

= 54

19. Ada berapa leading zero dari 69! ? 15 angka (trailing zero adalah banyaknya angka 0 yang
ada dibelakang suatu bilangan. Contoh 10 memiliki 1 trailing zero, 1200 memiliki 2 trailing
zero, 4096 tidak memiliki trailing zero
A. 6 angka
B. 10 angka
C. 13 angka
D. 14 angka
E. 15 angka

Perhatikan bahwa banyaknya trailing zero diperngaruhi oleh banyaknya faktor 10 pada 69!.
Selain itum banyaknya faktor 10 dipengaruhi oleh banyaknya faktor 2 dan 5 pada 69!.
Karena banyak faktor 2 pasti lebih banyak dari faktor 5 dari 69!, maka kita cukup fokus ke
faktor 5 saja.
Cara mencari banyak faktor 5 dari 69! adalah dengan membagi 69 dengan 5 saja. Sehingga
didapat 69 / 5 = 13. Namun perhatikan bahwa ada 2 bilangan yang memiliki 2 faktor 5 yaitu
50 dan 25. Sehingga solusi akhir dari masalah ini adalah 13 + 2 = 15
Deskripsi untuk soal berikut akan digunakan untuk 3 soal berikutnya

Segitiga paskal adalah segitiga yang dibentuk


dengan menuliskan angka satu pada ujung
bawah kanan dan kiri segitiga lalu
menuliskan suatu angka dengan hasil
penjumlahan dari 2 angka di atasnya.
Segitiga ini dapat dibentuk hingga tak
terhingga baris. Segitiga ini memiliki ukuran.
Ukuran dari segitiga paskal adalah banyak
baris yang ada pada segitiga itu. Di samping
kiri ini adalah segitiga paskal berukuran 7.
Suatu bilangan disebut mengkeren apabila
dapat dibentuk dengan menggunakan
beberapa bilangan yang ada di suatu segitiga paskal tertentu.
Contoh bilangan mengkeren adalah bilangan 16 yang bisa dibentuk dengan segitiga paskal
berukuran 5, dengan hanya menjumlahkan angka 1, 5, dan 10 pada segitiga tersebut. Contoh
lain adalah angka 5 yang dapat dibentuk dengan segitiga paskal berukuran 3 yang dengan
menjumlahkan angka angka yang ditandai pada gambar

20. Membentuk Membentuk


21. angka 16 angka 5

Dari contoh di atas, apabila ingin membentuk angka 5, ukuran segitiga paskal minimal yang
dibutuhkan adalah 3. Hal ini dikarenakan, dengan segitiga paskal berukuran 3, kita sudah
dapat membentuk angka 5 dengan menjumlahkan 1 + 1 + 1 + 2. Tidak ada segitiga paskal
berukuran lebih kecil dari 3 yang dapat digunakan untuk membuat angka 5

20. Berapakah ukuran segitiga paskal minimal untuk membuat bilangan 100?
A. 5
B. 6
C. 7
D. 8
E. 100

21. Berapakah ukuran segitiga paskal minimal untuk membuat bilangan 2023?
A. 29
B. 2023
C. 43
D. 11
E. 9
22. Berapakah ukuran segitiga paskal minimal untuk membuat bilangan 10.001?
A. 12
B. 13
C. 17
D. 20
E. 10001

Untuk menyelesaikan 3 soal di atas, kita perlu memperhatikan sifat dari segitiga paskal.
Perhatikan bahwa baris ke k pada segitiga paskal memiliki jumlah sama dengan 2k dengan k
dimulai dari 0 seperti pada gambar

1
2
4
8
16
32

Sehingga, hal itu mirip dengan representasi bilangan biner. Sehingga, cara paling mudah untuk
menjawab soal ini adalah dengan mengubah bilangan yang diinginkan menjadi bilangan biner
kemudian mencari bit terbesar dari bilangan itu. Solusi dari masalah ini adalah bit terbesar
dari bilangan itu.
100 => 1100100 -> ukuran segitiga paskal = 7
2023 => 11111100111 -> ukuran segitiga paskal = 11
10.001 => 10011100010001 -> ukuran segitiga paskal = 13
Dijamin bahwa ukuran itu sudah pasti ukuran minimal dari segitiga paskal yang mungkin

23.
int arr[] = {0, 5, 6, 7, 2, 3, 1, 4};

int wow(int a, int b, bool wew){


if(a == b){
if(wew == false) return a;
else return wow(arr[a], arr[arr[b]], 0);
}
else return wow(arr[a], arr[arr[b]], 0);
}

Berapakah hasil dari pemanggilan fungsi wow(1, 1, true) ? (1 -> pake paralel dfs)

A. 1
B. 3
C. 5
D. 7
E. 0
Soal ini dapat diselesaikan dengan menjalankan langsung programnya.

Ingat! Nilai 0 dapat berarti false pada c++, dan nilai 1 dapat berarti true dalam c++

fungsi a arr[a] b arr[arr[b]] wew return


Wow(1, 1, true) 1 5 1 3 true Wow(5, 3, false)
Wow(5, 3, false) 5 3 3 4 false Wow(3, 4, false)
Wow(3, 4, false) 3 7 4 6 false Wow(7, 6, false)
Wow(7, 6, false) 7 4 6 5 false Wow(4, 5, false)
Wow(4, 5, false) 4 2 5 7 false Wow(2, 7, false)
Wow(2, 7, false) 2 6 7 2 false Wow(6, 2, false)
Wow(6, 2, false) 6 1 2 1 false 1
Sehingga keluaran program adalah 1

Deskripsi untuk soal berikut akan digunakan untuk 2 soal berikutnya

Semisal terdapat kotak yang berisi 8 bola merah, 9 bola biru, dan 10 bola kuning.
24. Berapakah jumlah bola minimal yang perlu diambil dari kotak tersebut sehingga terdapat
minimal 3 bola dengan warna berbeda?
A. 3
B. 8
C. 10
D. 20
E. 27

Soal ini dapat diselesaikan dengan prinsip pigeonhole principle. Kita cukup ambil saja 2 bola
dengan jumlah terbanyak ditambah 1. Sehingga jawaban akhir kita adalah 10 + 9 + 1 = 20.
Dijamin pasti terdapat 3 warna berbeda yang muncul dalam pengambilan 20 bola.

25. Jika dilakukan pengambilan sebanyak 3 kali berturut – turut tanpa pengembalian, maka
berapa peluang terambilnya bola bola biru pada pengambilan pertama dan bola kuning pada
pengambilan kedua dan ketiga.
A. 3 / 65
B. 4 / 65
C. 5 / 65
D. 6 / 65
E. 7 / 65

Peluang terambilnya bola biru pada pengambilan pertama adalah 9 / 27


Peluang terambilnya bola kuning pada pengambilan kedua adalah 10 / 26
Peluang terambilnya bola kuning pada pengambilan ketiga adalah 9 / 25
Sehingga, hasil akhir solusi adalah
9.10.9 3
=
27 .26.25 65
26. Raja Dengklek (Raja Kerajaan Dengklek) sedang terlibat dalam peperangan melawan Raja Jago
(Raja kerajaan Ayam). Kerajaan Ayam ini merupakan kerajaan tangguh. Kerajaan ini terdiri dari
beberapa kota yang dihubungkan dengan ruas jalan seperti terlihat pada gambar.

7
14

3 2 3
3
5

4
3 4 2
2

1 1
4
5 5 1

Pak Dengklek ingin melakukan penyerangan terhadap ibukota Kerajaan Ayam (ditandai warna
hijau). Namun, yang menjadi masalah adalah satu – satunya jalan ke ibukota adalah dengan
melewati jalan – jalan yang ada di kerajaan Ayam tersebut. Yang menjadi masalah lagi, untuk
melewati suatu kota, Pak Dengklek harus berhasil menguasai kota tersebut sebelum akhirnya
mampu untuk melanjutkan perjalanan ke ke kota lain. Selain itu, untuk bergerak melewati
sebuah jalan, Pak Dengklek memerlukan waktu sesuai dengan angka yang tertera pada ruas
jalan di peta. Sekarang, dengan asumsi bahwa waktu yang diperlukan untuk menguasai satu
kota adalah satu hari dan Pak Dengklek memulai penyerangan dari kota yang ditandai warna
merah, berapa lamakah waktu minimal yang diperlukan Pak Dengklek untuk menguasai
ibukota kerajaan Ayam? Note. Pak Dengklek sudah menguasai kota berwarna merah, sehingga
ia tak perlu lagi berperang selama 1 hari di kota itu

A. 19 hari
B. 20 hari
C. 21 hari
D. 16 hari
E. 22 hari
Untuk menguasai satu kota, diperlukan waktu sebanyak waktu untuk berjalan ke kota itu + 1.
Oleh karena itu, graf di atas ekuivalen dengan graf berikut

8
15

4 3 4
4
6

5
4 5 3
3

2 2
5
6 6 2

Dengan graf yang berubah menjadi seperti itu, kita tidak perlu lagi memperhatikan waktu
untuk menguasai satu kota. Dengan begitu, kita cukup menggunakan algoritma Dijkstra
untuk menyelesaikan soal ini. Berikut adalah graf hasil algoritma Dijkstra. Bilangan pada tiap
node menunjukkan waktu minimal untuk menguasai satu kota.

21
7 14

3 11

17
14

19

6 14
12

Sehingga jawaban akhir kita adalah 21


27. Suatu ketika di suatu wilayah, terdapat kericuhan yang ditimbulkan oleh 5 orang. Mereka
adalah Kwak, Kwik, Kwuk, Kwek, dan Kwok. Mereka saling tuduh menuduh satu sama lain atas
kejadian yang terjadi di pulau itu. Mereka terdiri dari 2 golongan, yakni pahlawan dan pencuri.
Diketahui bahwa pahlawan selalu berkata jujur dan pencuri selalu berbohong. Dalam tuduh
menuduh yang mereka lakukan, terjadi percakapan berikut.
Kwak: Kwik adalah pencuri!
Kwik: Enak saja. Aku ini teman baik Kwek. Kwek adalah pahlawan sama sepertiku
Kwuk: Minimal salah satu dari Kwik, Kwak, dan Kwok adalah pencuri
Kwek: Kwak itu pasti pencuri
Kwok: Kalian semua salah
Jika diketahui terdapat minimal satu pencuri diantara mereka, siapakah para pencuri itu?
A. Kwek
B. Kwok
C. Kwik dan Kwuk
D. Kwak dan Kwok
E. Kwek dan Kwak

Cara paling mudah adalah mencoba – coba kemungkinan


Misalkan kwak jujur
Maka kwik adalah pencuri (bohong). Lalu kwek adalah pencuri (bohong), lalu kwak adalah
pahlawan (jujur). Kemudian kwuk jujur karena pernyataannya benar. Dan kwok (pencuri)
bohong karena pernyataannya salah. Maka pencurinya Kwik, Kwek, dan Kwok.

Semisal kwak bohong (pencuri)


Maka kwik adalah pahlawan (jujur). Kwek adalah pahlawan (jujur). Kemudian pernyataan
kwek sejalan dengan fakta bahwa kwak adalah pencuri. Kwuk jujur karena pernyataannya
benar. Dan kwok bohong karena pernyataan Kwik, Kwek, dan Kwok benar. Sehingga
pencurinya adalah Kwak dan Kwok.

Dari kedua opsi pencuri, maka yang memenuhi jawaban pada pertanyaan adalah D. Kwak dan
Kwok
28. Diketahui pernyataan berikut
S = (P and Q) or (not P and (Q or R))

Manakah konfigurasi dari P, Q, R berikut yang menghasilkan nilai false?

A. P = false, Q = true, R = false


B. P = true, Q = true, R = false
C. P = false, Q = false, R = true
D. P = false, Q = true, R = true
E. P = true, Q = false, R = true

Untuk soal ini, kita bisa memisahkan persamaan menjadi seperti ini

Pers 1 = (P and Q)

Pada persamaan ini, jika Q atau P bernilai false, maka hasilnya false

Pers 2 = (not P and (Q or R))

Pada persamaan ini, jika P bernilai true atau Q dan R bernilai false, maka hasilnya false

Karena kedua persamaan itu dihubungkan dengan or, maka cukup cari konfigurasi yang
menghasilkan false pada kedua persamaan itu. Konfigurasi yang valid adalah E

29. Tentukan banyak faktor dari bilangan 4080!


A. 40
B. 17
C. 16
D. 48
E. 4

Kita cukup mencari faktorisasi prima dari 4080. Yaitu

4080 = 24 . 3 . 5 . 17
Untuk mencari banyak faktor, kita cukup gunakan nilai nilai pangkat dari faktorisasi prima itu,
menambahkan 1 pada setiap pangkatnya, dan mengalikannya

4 .1 .1 .1 -> banyak pangkat tiap faktor

5 .2 .2 .2 -> ditambah 1

5 . 2 . 2 . 2 = 40 -> dikalikan

30. Tentukan jumlah faktor dari bilangan 2096! 131 * 2^4


A. 3147
B. 4092
C. 1310
D. 100
E. 3096
Untuk menyelesaikan masalah ini, dapat diselesaikan dengan mencari faktorisasi prima dari
2096.

2096 = 24 .131
Kemudian, jumlah faktor dari 2096 dapat dicari dengan

𝑗𝑢𝑚𝑙𝑎ℎ 𝑓𝑎𝑘𝑡𝑜𝑟 = (1 + 21 + 22 + 23 + 24 ). (1 + 131)


𝑗𝑢𝑚𝑙𝑎ℎ 𝑓𝑎𝑘𝑡𝑜𝑟 = 4092

Berikut potongan kode untuk soal berikut

int arr[] = {0, 3, 5, 9, 10, 11, 24, 26, 68, 69, 100, 123, 240};

int bebek(int kwek, int kwok, int wakwaw){


int kwuk = (kwek + kwok) / 2;
if(kwek == kwok){
if(arr[kwuk] < wakwaw) return 1000000;
else return arr[kwuk];
}
else{
if(arr[kwuk] < wakwaw) return bebek(kwuk + 1, kwok, wakwaw);
else return min(arr[kwuk], bebek(kwek, kwuk - 1, wakwaw));
}
}

31. Berapakah keluaran dari bebek(1, 12, 50)?


A. 3
B. 50
C. 68
D. 123
E. 1000000

Kita dapat menjalankan algoritma di atas


Fungsi kwek kwok kwuk arr[kwuk] wakwaw return
Bebek(1, 12, 50) 1 12 6 24 50 Bebek(7, 12, 50)
Bebek(7, 12, 50) 7 12 9 69 50 Min(69,
bebek(7, 8, 50))
Bebek(7, 8, 50) 7 8 7 26 50 Bebek(8, 8, 50)
Bebek(8, 8, 50) 8 8 8 68 50 68

Hasil akhir fungsi adalah minimum dari 68 dan 69 yaitu 68.


32. Berapakah keluaran dari bebek(1, 7, 78)?
A. 11
B. 69
C. 78
D. 100
E. 1000000

Kita dapat menjalankan algoritma di atas


Fungsi kwek kwok kwuk arr[kwuk] wakwaw return
Bebek(1, 7, 78) 1 7 4 10 50 Bebek(5, 7, 50)
Bebek(5, 7, 50) 5 7 6 24 50 Bebek(7, 7, 50)
Bebek(7, 7, 50) 7 7 7 26 50 1000000

Sehingga program di atas mengeluarkan hasil 1000000


Informasi tambahan: algoritma di atas merupakan algoritma binary search yang berguna
untuk mencari bilangan terkecil yang lebih besar dari wakwaw dari range kwek hingga
kwok (inklusif) pada array. Jika tidak ada maka program akan mengeluarkan 1000000

33. Ada berapa cara mempermutasikan string “BEBEKMAAMWOWOK” menjadi sebuah string
palindrome? Note: string palindrome adalah string yang apabila dibaca dari kiri ke kanan atau
dari kanan ke kiri. Contoh “kasurrusak” adalah palindrom karena apabila dibalik maka menjadi
“kasurrusak.” Sementara “kursi” bukanlah palindrom karena apabila dibalik maka menjadi
“isruk”.
A. 681080400
B. 87178291200
C. 3700
D. 6245800
E. 5040

String palindrom adalah string yang apabila dibaca dari belakang atau depan sama saja.
Cara paling sederhana dari menyelesaikan masalah ini adalah mencari semua permutasi
string kemudian memeriksanya satu persatu string mana saja yang palindrom. Namun hal
ini tentu sulit dikarenakan akan ada sangat banyak kemungkinan string. Oleh karena itu
kita akan sederhanakan masalahnya.

Semisal kita memiliki string palindrom BEWOKMAAMKOWEB. Perhatikan bahwa kita


dapat membagi string ini menjadi 2 sama besar yaitu BEWOKMA dan AMKOWEB. String
AMKOWEB merupakan kebalikan dari string BEWOKMA.

Dalam membuat string palindrom yang memiliki panjang 12, sebenarnya kita cukup
membuat string sembarang dengan panjang 6 saja (6 adalah setengah dari 12) kemudian
cukup membuat kebalikan dari string itu dan memasangkannya.

Untuk membuat string BEWOKMAAMKOWEB, kita cukup membuat string BEWOKMA,


membuat kebalikannya (AMKOWEB) dan menyambungkannya. Sehingga pemasalahan
menjadi lebih sederhana. Selain itu, setiap karakter pada string palindrom pasti memiliki
genap karakter.
Permasalahan kita pun lebih sederhana. Hitung saja frekuensi kemunculan tiap karakter
B = 2, E = 2, W = 2, O = 2, K = 2, M = 2, A = 2
Bagi 2 semuanya. (untuk membuat string sembarang berukuran 6)
B = 1, E = 1, W = 1, O = 1, K = 1, M = 1, A = 1
Lalu cari permutasinya = 7! = 5040

34. Bu Astri merupakan seorang guru di suatu sekolah. Ia memiliki 6 murid yang bernama Kwok,
Kwik, Kwuk, Kwek, Kwak, dan Kwuouk. Keenam murid ini memiliki tempat duduk kesayangan
di kelasnya. Ketika duduk, mereka selalu membentuk barisan horizontal dari kiri ke kanan
dengan konfigurasi Kwok, Kwik, Kwuk, Kwek, Kwak, dan Kwuouk. Namun, karena mereka
semua duduk pada kursi kesayangannya masing – masing, pelajaran di kelas menjadi kurang
kondusif lantaran mereka yang selalu berisik ketika Bu Astri sedang menjelaskan pelajaran.
Untuk itu, Bu Astri ingin mengacak tempat duduk keenam muridnya sehingga mereka semua
tidak ada yang duduk di kursi kesayangannya masing – masing demi terciptanya pelajaran
yang kondusif. Kemudian Bu Astri pun bertanya, ada berapa konfigurasi tempat duduk yang
mungkin bagi keenam murid tersebut sehingga tidak ada dari mereka yang duduk di kursi
kesayangannya masing – masing? Salah satu contoh konfigurasi yang valid adalah (dari kiri ke
kanan) Kwik Kwok, Kwek, Kwuk, Kwuouk, Kwak.
A. 720 cara
B. 120 cara
C. 265 cara
D. 719 cara
E. 500 cara

Pada soal ditanyakan bagaimana cara mengacak tempat duduk 6 murid. Ini merupakan salah
satu contoh masalah klasik dari DP dearranggement

Definisikan DP[x] adalah banyak cara mengacak x murid sehingga tidak ada yang berada di
posisi yang sama dengan posisi semula

Ada 2 basis untuk DP ini.

DP[1] = 0. Hal ini dikarenakan tidak ada cara untuk mengacak 1 murid agar pindah dari
tempat duduknya

DP[2] = 1. Hal ini dikarenakan untuk mengacak 2 murid (misal AB). Maka hanya ada 1
cara untuk mengacak mereka yaitu BA.

Untuk Transisi dapat didefinisikan sebagai berikut

Semisal kita ingin memasukkan murid baru x ke dalam deretan kursi. Kita tidak
diperbolehkan untuk meletakkan x ke kursi x. Dikarenakan hal itu tidak memenuhi kondisi
pengacakan. Kita memiliki (x - 1) opsi kursi yaitu dari kursi 1 hingga x – 1 untuk meletakkan x.

Semisal kita memilih kursi i (i <= x). Ada 2 kemungkinan yang terjadi dari orang yang
berada di kursi i tersebut:

a. Orang ke i akan menempati kursi x


Hal ini ekuivalen dengan x dan i bertukar posisi. Dan masalah kita
sekarang hanyalah tinggal mengacak x – 2 orang sisanya (DP[x - 2])
b. Orang ke i akan menempati kursi selain x
Hal ini ekuivalen dengan kita mengacak x – 1 orang sisanya yang belum
teracak (DP[x - 1])

Sehingga, transisi dari DP ini adalah

DP[x] = (x - 1) * DP[x - 1] + (x - 1) * DP[x - 2]

DP[x] = (x - 1) * (DP[x - 1] + DP[x - 2])

Apabila kita buat tabel DP nya akan didapat seperti ini

DP 1 2 3 4 5 6
Nilai 0 1 2 9 44 265

Sehingga, solusi dari masalah kita adalah DP[6] = 265

35. Suatu hari Ereh ingin membuat pedang berbentuk persegi Panjang dengan ujung meruncing
ke atas yang memiliki panjang 7 seperti gambar berikut
1
7

6
Untuk membuat pedang itu, Ereh akan menggabungkan beberapa pedang yang berukuran
lebih kecil dan menyusunnya menjadi 1 pedang besar yang diinginkan. Berikut adalah
potongan pedang pedang kecil dengan ukurannya yang dimiliki Ereh dalam jumlah tak
terbatas

2 1 1
Pedang – pedang itu akan disusun menjadi pedang yang lebih besar. Berikut adalah salah
satu cara penyusunan pedang berukuran 7 yang bisa dilakukan dengan menyusun pedang – pedang
kecil itu

Sehingga total panjang pedang yang terbentuk adalah 7. Sekarang Ereh pun bertanya, ada berapa
konfigurasi pembentukan pedang ujung meruncing ke atas dengan ukuran 7 dengan
menggabungkan potongan pedang pedang kecil itu yang valid?

A. 17 cara
B. 16384 cara
C. 512 cara
D. 4096 cara
E. 1024 cara

Soal ini dapat diselesaikan dengan prinsip Dynamic Programming

Definisikan f[x] adalah banyak cara membuat pedang berujung runcing dengan
X panjang x

X Definiskan g[x] adalah banyak cara membuat pedang berujung vertikal dengan
panjang x

Kita akan mencari nilai dari F[7]

Untuk transisinya, ada 3 macam

Untuk F[x]

Perhatikan bahwa kita dapat membuat F[x] dengan memasang


pedang oranye pada pedang dengan panjang x – 1. Sehingga
F[x] dapat ditambahkan dengan nilai F[x - 1]

Lalu kita juga dapat menambahkan pedang hijau pada pedang


vertikal dengan panjang x – 1. Sehingga nilai F[x] ditambahkan
dengan G[x - 1]

Terakhir, kita bisa menambahkan pedang ungu pada pedang ujung runcing berukuran x – 1.
Sehingga F[x] ditambahkan dengan nilai F[x - 1]
Sehingga F[x] = F[x - 1] + G[x - 1] + F[x - 1] = 2F[x - 1] + G[x - 1]

Lalu untuk G[x], kita bisa membuat G[x] dengan dua cara. Yaitu menambahkan pedang hijau
pada pedang ujung runcing panjang x seperti ini

Sehingga G[x] = 2F[x]

F[x] = 2F[x - 1] + G[x - 1]

= 2F[x - 1] + 2F[x - 1]

= 4F[x - 1]

Sementara untuk basis, F[1] = 1 karena hanya ada satu cara membuat pedang ujung
meruncing ke atas dengan panjang 1 yaitu adalah dengan satu pedang hijau. Lalu isi saja DP-
nya dengan tabel berikut

DP 1 2 3 4 5 6 7
Nilai 1 4 16 64 256 1024 4096

Maka solusi akhir kita adalah F[7] yakni 4096 cara

36. Kwak dan Kwik adalah rival abadi dalam permainan catur. Mereka berdua adalah pecatur
hebat yang saking seimbangnya kemampuan mereka, permainan catur mereka selalu berakhir
seri. Untuk itulah, mereka ingin menentukan siapa diantara mereka yang paling hebat dengan
mengadu diri di sebuah permainan baru. Mula – mula mereka menggambar beberapa titik
yang dihubungkan dengan garis seperti pada gambar.

3
6 11
2
=
=
5
9 4

8 =

=
4 =
1 = =
7 10
12
=
=
=

Masing – masing dari mereka akan meletakkan pion mereka di 2 buah titik berbeda.
Kemudian secara bergantian, mereka akan menggerakkan pion – pion itu ke titik – titik yang
terhubung langsung dengan pion itu. Dalam satu langkah, pion pemain yang mendapat giliran
tidak boleh menempati titik yang sedang ditempati pemain lain. Pemain yang pertama kali
kehabisan tempat atau tidak bisa bergerak akan kalah. Kedua pemain akan bermain secara
optimal untuk memenangkan permainan. Apabila Kwak adalah pemain pertama yang
mendapat kesempatan untuk memilih titik pertama tempat pionnya diletakkan, titik manakah
yang dapat membuat Kwak selalu menang melawan Kwik dimanapun Kwik meletakkan pion
pertamanya?
A. Titik 2
B. Titik 9
C. Titik 6
D. Permainan tak akan selesai
E. Tidak ada (kwik selalu menang)

Solusi
Kwik selalu menang.
Mengapa begitu? Dikarenakan dimanapaun kwak memilih tempat mulai, langkah paling
optimal bagi kwik adalah memilih tempat yang tepat bersebelahan dengan posisi kwak.
Dengan begitu, kwak akan terpaksa harus “mundur” dan kwik pun dapat bergerak ke posisi
kwak sebelumnya. Dengan begitu pasti kwak akan terdesak dan kalah.

37. Suatu ketika, wabah virus etanaisa sedang menyerang warga kota Dengkleksia. Sebagai dokter
sekaligus ilmuwan terhebat di kota itu, Pak Dengklek pun segera mencari cara untuk
mengatasi wabah tersebut. Setelah meneliti dalam waktu 2 hari, ia pun berhasil menemukan
bakteri baik yang dapat digunakan sebagai bahan obat penawar wabah tersebut. Yang
menjadi masalah, 1 bakteri kecil hanya bisa dipakai untuk mengobati satu orang penduduk
saja. Selain itu, bakteri – bakteri ini diketahui dapat menghasilkan 2 anakan baru setelah hidup
selama lebih dari sama dengan 2 hari. Yang menjadi masalah, setelah hidup selama 3 hari
bakteri itu akan mati begitu saja dan tidak menghasilkan keturunan. Terakhir, karena proses
membuat obat dari bakteri ini sangat sulit, maka Pak Dengklek hanya ingin mengolah semua
obat yang dibutuhkan untuk mengobati satu kota jika dan hanya jika jumlah bakteri sudah
memenuhi jumlah penduduk dalam waktu satu hari. Jika diketahui jumlah penduduk yang
terserang penyakit adalah 120 orang dan Pak Dengklek memulai pengembangbiakan bakteri
pada hari ke 0, berapakah jumlah bakteri minimal yang dibutuhkan sehingga Pak Dengklek
dapat mengobati seluruh penduduk setidaknya pada hari ke 7 pengembangbiakan bakteri?
A. 3 bakteri
B. 4 bakteri
C. 6 bakteri
D. 7 bakteri
E. 10 bakteri

Kita dapat menyelesaikan masalah ini dengan dynamic programming. Untuk memDefinisikan
DP[x] sebagai banyak bakteri pada hari ke x. Untuk basisnya, agar mempermudah kita anggap
bahwa mula – mula kita hanya menggunakan 1 bakteri saja, sehingga DP[0] = 1.
Kemudian untuk transisinya, Mula – mula kita anggap bahwa banyak bakteri hari ke x sama
dengan bakteri di hari ke x – 1, maka DP[x] = DP[x - 1]. Lalu dikarenakan setiap bakteri mulai
mampu berkembang biak saat hari kedua dia hidup, maka DP[x] akan ditambah DP[x - 2] untuk
x >= 2. Terakhir, karena setiap bakteri yang berumur lebih dari 3 hari akan mati, maka DP[x]
akan dikurangi oleh DP[x - 3] untuk x >= 3.
Sehingga, secara formal:
DP[x] = 0 untuk x < 0
DP[x] = 1 untuk x = 0
DP[x] = DP[x - 1] + DP[x - 2] – DP[x - 3] untuk x >= 3
Dan nilai yang kita cari adalah DP[7]. Maka kita buat saja tabelnya hingga DP[7] dan jadilah
seperti ini
1 1 2 3 6 10 19 33

Terlihat bahwa DP[7] = 33. Maka, untuk mencari bakteri minimal agar DP[7] >= 120, maka kita
cukup cari saja nilai dari
120
⌈ ⌉=4
33
Maka bakteri yang kita butuhkan minimal di awal adalah 4. Mengapa bisa begitu? Karena jika
kita mengalikan nilai DP[0] dengan 4, maka pasti nilai nilai dari DP[x] dimana x >= 1 akan terkali
dengan 4 juga. Sehingga DP[7] menjadi 33 * 4 = 132 dimana 132 > 120

38. Diketahui Asep, Budi, Caci, dan Deni ingin menyeberangi sebuah jembatan. Namun karena
jembatan itu sempit, jembatan itu hanya mampu dilewati dengan syarat sebagai berikut
A. Dalam satu waktu, jembatan hanya boleh dilewati maksimal 2 orang.
B. Masalah kedua, karena hari sudah malam maka orang atau sepasang orang yang melewati
jembatan itu harus membawa penerangan.
C. Masalah ketiga, mereka semua hanya membawa satu penerangan sehingga mereka harus
berganti – gantian dalam menggunakan penerangan itu ketika ingin melewati jembatan.
D. Waktu yang diperlukan bagi Asep, Budi, Caci, dan Deni dalam melewati jembatan secara
berurutan adalah 2 menit, 3 menit, 12 menit, dan 10 menit. Jika ada dua orang yang
secara bersamaan melewati jembatan, maka waktu yang dibutuhkan oleh kedua orang itu
untuk melewati jembatan sama dengan maksimal dari waktu salah satu dua orang
tersebut.
Sebagai contoh, semisal Caci dan Asep melewati jembatan bersamaan, maka mereka
memerlukan waktu 12 menit (maksimal dari 2 dan 12) untuk melewati jembatan.
Sementara jika Deni dan Budi melewati jembatan bersama sama, maka waktu yang
diperlukan adalah 10 menit

Pertanyaannya, berapakah waktu minimal yang diperlukan agar keempat orang itu bisa
melewati jembatan tanpa masalah?

A. 27 menit
B. 25 menit
C. 23 menit
D. 21 menit
E. 19 menit

Cara paling optimal dari menyelesaikan masalah ini adalah mengelompokkan orang yang
tercepat menjadi satu kelompok dan orang lambat menjadi satu kelompok. Sehingga,
begini simulasinya
1. Mula – mula Asep dan Budi menyeberang jembatan sambil membawa penerangan.
Total waktu 3 menit.
2. Lalu, Asep kembali kepada 2 teman lainnya yang ada di seberang jembatan sambil
membawa penerangan. Total waktu 2 menit
3. Kemudian, Caci dan Deni menyeberang jembatan. Total waktu 12 menit.
4. Lalu Budi membawa penerangan yang dibawa Caci dan Deni untuk menjemput Asep
di seberang jembatan. Total waktu 3 menit
5. Terakhir, Asep dan Budi menyeberang jembatan. Total waktu 3 menit

Sehingga, waktu paling cepat yang dibutuhkan adalah 3 + 2 + 12 + 3 + 3 = 23 menit.

39. Dalam suatu balapan, yang diikuti oleh A, B, C, D, E diketahui beberapa fakta berikut.
A. A sampai finish lebih dahulu ketimbang B dan C
B. B sampai di finish sesudah D
C. E sampai di finish setelah A dan sebelum D

Siapakah orang yang mencapai garis finish lebih dahulu?

A. A
B. B
C. C
D. D
E. E

Kita dapat menyelesaikan masalah ini dengan mencoba – coba tiap pernyataan.

Mula – mula, A sampai finish lebih dahulu ketimbang B dan C. Letakkan A di depan B dan
C

A B
B
C
Bfinish sesudah D. Letakkan D di depan B dan C
Lalu, B sampai di

A D B
B
C
B setelah A dan sebelum D. Maka kita letakkan E di antara A
Kemudian, E sampai di finish
dan D

A E D B
B
C
B
Maka, A sampai di finish terlebih dahulu
40. Inand memiliki hobi yang aneh. Ia suka sekali menumpuk piring – piring yang ada di mejanya.
Di mejanya terdapat beberapa piring. Piring – piring itu tersusun dengan rapi dari kiri ke kanan.
Dalam menumpuk piringnya, ia memiliki aturan khusus. Ia akan mulai mengambil piring
dimulai dari piring terkiri hingga terkanan yang ada di meja. Dalam membuat tumpukan, ia
bisa memulai tumpukan piring baru di mejanya, atau dengan menumpuk piring yang sedang
ia bawa sekarang ke tumpukan piring yang sudah ada sebelumnya. Namun, ia hanya akan
menumpuk piring ke tumpukan piring lainnya jika dan hanya jika piring yang ia bawa sekarang
memiliki ukuran lebih kecil atau sama dengan dari piring teratas di tumpukan piring yang
sudah ada.
Sebagai contoh, apabila konfigurasi ukuran piring dari yang kiri ke kanan di meja Inand
adalah 5 2 4 1 3, salah satu konfigurasi penumpukan piring yang mungkin ada pada gambar

1
5 2 4 3

a. Mula mula ia mengambil piring pertama dengan ukuran 5 dan membuat tumpukan baru
b. Kemudian ia mengambil piring kedua dengan ukuran 2 dan membuat tumpukan baru
c. Ia mengambil piring ketiga dengan ukuran 4 dan membuat tumpukan baru
d. Setelah itu ia mengambil piring keempat dengan ukuran 1 dan menumpukknya di atas
tumpukan 3
e. Kemudian ia mengambil piring dengan ukuran 3 dan membuat tumpukan baru, sehingga
banyak tumpukan adalah 4

Apabila konfigurasi ukuran piring dari kiri hingga kanan meja adalah 9 2 7 1 2 9 17 23 6 11,
berapakah banyak tumpukan minimal yang bisa dibentuk?

A. 10
B. 8
C. 7
D. 5
E. 3

Kita dapat melakukan greedy untuk soal ini. Greedy-nya adalah setiap kali kita memiliki satu
piring dan pirint itu dapat diletakkan di atas piring lainnya, maka letakkan piring itu di atas
piring terkecil yang lebih besar dari piring itu. Sehingga konfigurasi paling optimal adalah
sebagai berikut

2 2 6 11

9 7 9 17 23

Sehingga jawaban akhir kita adalah 5 tumpukan.


Tambahan! Masalah ini merupakan masalah klasik dari DP Longest Increasing Subsequence
(LIS). Mengenai DP LIS ini, dapat dibaca melalui link berikut .

Anda mungkin juga menyukai