Struktur Data (T0026) Genap 2010/2011 Topik

advertisement
Struktur Data (T0026)
Tugas #2
Genap 2010/2011
(kelompok, max. 3 orang)
Topik : Queue, Infix, Prefix, Postfix, DFS, BFS.
Mulai : 3 Maret 2011
Batas : 16 Maret 2011
STANDARD PROBLEMS
A5.
Buatlah implementasi dari struktur data antrian yang memiliki operasi sebagai berikut:
is_full()
: return 1 jika jumlah data (antrian) adalah penuh (= MAXN), return 0 jika tidak.
is_empty()
: return 1 jika jumlah data (antrian) adalah kosong, return 0 jika tidak.
push_front(x) : simpan nilai x (integer) di antrian paling depan.
push_back(x) : simpan nilai x (integer) di antrian paling belakang.
front()
: return nilai yang berada di antrian paling depan.
back()
: return nilai yang berada di antrian paling belakang.
pop_front()
: hapus data yang berada di antrian paling depan.
pop_back()
: hapus data yang berada di antrian paling belakang.
Implementasikan struktur data di atas dengan menggunakan array (bukan linked list). Berikan juga analisa kompleksitas
dari masing-masing operasi di atas. Maksimal nilai 1.2 point jika ada operasi yang kompleksitasnya lebih besar dari
O(1).
[2 point]
Contoh:
push_back(10)
push_back(15)
push_front(13)
front()
back()
pop_back()
pop_front()
// data: 10
// data: 10 15
// data: 13 10 15
// return 13
// return 15
// data: 13 10
// data: 10
A6. Buatlah implementasi dari operasi berikut (lanjutan dari A5):
kthfront(x)
: return nilai yang berada di antrian ke x dari depan.
kthback(x)
: return nilai yang berada di antrian ke x dari belakang.
Maksimal nilai 0.5 point jika ada operasi yang kompleksitasnya lebih besar dari O(1).
Contoh:
push_back(10)
push_back(15)
push_front(13)
push_front(20)
kthfront(2)
kthback(2)
Tugas #2
// data: 10
// data: 10 15
// data: 13 10 15
// data: 20 13 10 15
// return 13
// return 10
Suhendry Effendy
Struktur Data (T0026)
Genap 2010/2011
A7. Buatlah program yang membaca input sebuah string ekspresi matematika dalam notasi postfix dan mencetak output
berupa nilai yang dihasilkan dari ekspresi tersebut. Asumsikan notasi postfix yang diberikan selalu valid (anda tidak
perlu membuat program untuk menguji apakan input yang diberikan valid/tidak), hanya terdiri dari operand 0..9 dan
operator + - * dan /.
Contoh:
Input
: 342/+7*
Output : 35
Hint: hati-hati dengan operand yang diinput sebagai karakter (karakter ‘3’ nilainya tidak sama dengan integer 3).
A8. Buatlah program yang membaca input sebuah string ekspresi matematika dalam notasi infix dan mencetak output
berupa notasi postfix dari ekspresi tersebut. Asumsikan notasi infix yang diberikan selalu valid (anda tidak perlu
membuat program untuk menguji apakan input yang diberikan valid/tidak), hanya terdiri dari operand 0..9 dan
operator + - * dan / serta ( ).
Contoh:
Input
: (3+4/2)*7
Output : 342/+7*
OPTIONAL PROBLEMS
B5. Buatlah program yang membaca input sebuah string dan uji apakah string tersebut merupakan notasi prefix yang valid.
Jika ya, anda juga diminta untuk mencetak nilai yang dihasilkan dari ekspresi tersebut. Input yang diberikan bisa terdiri
dari karakter ‘A’..’Z’, ‘a’..’z’, ‘0’..’9’, ‘+’, ‘-‘, ‘*’, ‘/’, ‘!’, ‘?’. Hanya ada 10 operand yang valid, yaitu operand 1 digit dari 0
hingga 9 (operand yang lebih dari 1 digit dianggap invalid). Jika string yang diinput adalah notasi prefix yang valid, maka
cetak YES dan diikuti dengan nilai dari ekspresi tersebut, jika tidak cetak NO.
Contoh:
Input
: *+3/427
Output : YES 35
Input
Output
: *+13/427
: NO
Input
Output
: *+3/4?27
: NO
Input
Output
: *+a/B27
: NO
Note: 0.6 point jika anda bisa menyelesaikan setidaknya salah satu dari validasi notasi (YES/NO) atau evaluasi nilai.
B6. Buatlah program yang membaca input sebuah string ekspresi matematika dalam notasi infix dan mencetak output
berupa notasi prefix dari ekspresi tersebut. Asumsikan notasi infix yang diberikan selalu valid (anda tidak perlu
membuat program untuk menguji apakan input yang diberikan valid/tidak), hanya terdiri dari operand 0..9 dan
operator + - * dan / serta ( ).
Contoh:
Input
: (3+4/2)*7
Output : *+3/427
Tugas #2
Suhendry Effendy
Struktur Data (T0026)
Genap 2010/2011
B7. Ada sebuah stasiun kereta api yang unik. Stasiun ini dibangun sebagai tempat transit kereta-kereta yang berangkat dari
kota A menuju kota B. Hanya ada satu jalur/rel yang menghubungkan kota A maupun kota B dengan stasiun ini, dan
jalur menuju stasiun ini didisain sedemikian sehingga berakhir buntu pada stasiun tersebut (lihat gambar untuk lebih
jelasnya).
N kereta berangkat dari kota A dengan masing-masing berlabel 1, 2, 3, …, N secara berurutan (kereta 1 ada di paling
depan). Kepala stasiun di kota B ingin kereta-kereta yang berangkat dari kota A tiba di kota B dengan urutan a1, a2, a3, …
aN. Karena hanya ada satu rel, tentunya kereta yang satu tidak bisa mendahului kereta yang lainnya. Satu-satunya cara
untuk memenuhi keinginan kepala stasiun tersebut adalah dengan memanfaatkan stasiun transit yang berada di antara
kota A dan kota B.
Contoh:
Ada 4 kereta berangkat dari kota A dan urutan tiba di kota B yang diinginkan adalah 3, 2, 4, 1:
Di sini anda boleh mengasumsikan:
- Jika kereta X dari kota A sudah tiba di stasiun transit, maka ia tidak diijinkan kembali ke kota A.
- Jika kereta X dari stasiun transit sudah tiba di kota B, maka ia tidak diijinkan kembali ke stasiun transit.
- Setiap kereta bisa bergerak ke kedua arah (anda tidak usah memikirkan bagaimana kereta yang berasal dari stasiun
transit bisa berjalan “terbalik” menuju kota B).
Tugas #2
Suhendry Effendy
Struktur Data (T0026)
Genap 2010/2011
Ada kalanya, urutan yang diinginkan oleh kepala stasiun tersebut tidak mungkin bisa diwujudkan (ct: 3, 1, 2, 4). Tugas
anda adalah membuat program yang membaca input N dan kemudian membaca N buah bilangan yang
merepresentasikan urutan tiba di kota B yang diinginkan. Asumsikan bahwa N bilangan ini selalu merupakan salah satu
permutasi dari 1, 2, 3, …, N (terdiri dari 1..N dengan urutan sembarang dan tidak ada bilangan duplikat). Anda tidak
perlu melakukan validasi apakah ada bilangan yang duplikat/tidak atau apakah semua bilangan dari 1..N ada semua.
Dari input yang diberikan, evaluasi apakah urutan tiba tersebut dapat diwujudkan, jika ya maka cetak YES, jika tidak
maka cetak NO.
Contoh:
Input
:43241
Output : YES
B8.
Input
Output
:43124
: NO
Input
Output
:532541
: YES
Input
Output
:532514
: NO
ROBO (robot) sedang diuji coba pada arena berukuran N x M. Ia diperintahkan untuk bergerak menuju posisi
target dengan jumlah langkah seminimal mungkin. ROBO hanya bisa bergerak ke empat arah: utara, selatan, barat, dan
timur. ROBO tidak bisa bergerak keluar dari arena maupun bergerak menembus dinding.
[2 point]
T
R
Tugas anda adalah membuat program untuk menghitung jumlah langkah minimal yang diperlukan oleh ROBO untuk
bergerak dari posisi dia menuju posisi target. Sertakan sourcecode jawaban anda pada file terpisah (B8.C/B8.CPP). Hint:
gunakan struktur data queue (BFS).
Input
Baris-1
: Dua bilangan bulat N (1 <= N, M <= 100) yang menunjukan ukuran arena.
Baris-2 s/d N+1 : Representasi arena pada matriks berukuran N baris dan M kolom. ‘.’ menunjukan cell yang bisa
dilewati ROBO, ‘#’ menunjukan cell yang tidak bisa dilewati ROBO, ‘R’ adalah posisi awal ROBO,
sedangkan ‘T’, adalah posisi target.
Output
Sebuah bilangan bulat yang menunjukkan jumlah langkah minimal yang diperlukan.
Contoh Input
5 8
#...#.##
..#.T.#.
.####.#.
..R.#.#.
##......
Contoh Output
8
Tugas #2
Suhendry Effendy
Struktur Data (T0026)
B9.
Genap 2010/2011
Lolos pada uji coba tahap pertama, sekarang ROBO (robot) akan diuji pada arena lain berukuran N x M.
Tugasnya masih sama, ia diperintahkan untuk bergerak dari posisi dia menuju posisi target. Tapi kali ini ROBO
dilengkapi dengan mesin bor yang mampu menghancurkan dinding. Setiap pengeboran, ROBO bisa menghancurkan
satu cell dinding sehingga ia bisa masuk ke cell tersebut. ROBO hanya bisa bergerak ke empat arah: utara, selatan,
barat, dan timur. ROBO tidak bisa bergerak keluar dari arena maupun bergerak menembus dinding.
[4 point]
T
R
Tugas anda adalah membuat program untuk menghitung jumlah pengeboran minimal (bukan jumlah langkah minimal)
yang diperlukan ROBO untuk mencapai posisi target. Sertakan sourcecode jawaban anda pada file terpisah
(B9.C/B9.CPP).
Input
Baris-1
: Dua bilangan bulat N (1 <= N, M <= 100) yang menunjukan ukuran arena.
Baris-2 s/d N+1 : Representasi arena pada matriks berukuran N baris dan M kolom. ‘.’ menunjukan cell yang bisa
dilewati ROBO, ‘#’ menunjukan cell yang tidak bisa dilewati ROBO, ‘R’ adalah posisi awal ROBO,
sedangkan ‘T’, adalah posisi target.
Output
Sebuah bilangan bulat yang menunjukkan jumlah pengeboran minimal yang diperlukan.
Contoh Input
5 8
#.###.##
..##T.#.
.####.#.
..R####.
##.##...
Contoh Input
2
Penjelasan Contoh
#.###.##
..@@T.#.
.####.#.
..R####.
##.##...
Dinding yang perlu dihancurkan ROBO adalah dinding yang ditandai dengan label ‘@’.
-----
Tugas #2
Suhendry Effendy
Download