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