Soal - Taksi

Oleh zegova 192 16 pada Jumat, 16 Agu 2013, 07:10:18


Kembali ke forum umum


Petunjuk Diskusi
Silahkan masuk untuk berdiskusi



Suatu sekolah di Kebumen mengadakan lomba coding se-kabupaten Kebumen. Lomba tersebut diikuti oleh seluruh sekolah menengah atas yang ada di Kebumen. Masing-masing sekolah mengirimkan perwakilannya paling banyak 4 siswa. Lomba ini berlangsung selama 3 hari berturut-turut dan menuntut pesertanya untuk menginap di asrama yang sudah di sediakan. Untuk berangkat menuju tempat pertandingan, panitia menyediakan taksi untuk semua peserta. Setiap taksi dapat menampung paling banyak 4 penumpang. Tentukan berapa taksi minimum yang dibutuhkan untuk mengangkut semua siswa jika setiap siswa dari sekolah yang sama harus berada di satu taksi yang sama (tidak menutup kemungkinan satu taksi berisi lebih dari satu sekolah yang berbeda)!

Input
Baris pertama berisi integer n (1<=n<=10^5) yaitu jumlah sekolah yang berpartisipasi. Baris kedua berisi s1, s2, ..., sn (1<=si<=4) yaitu banyaknya siswa yang mewakili tiap sekolah.

Output
Print satu angka yaitu angka taksi minimum yang dibutuhkan.

Contoh:
Input
5
1 2 4 3 3
Output
4

Input
8
2 3 4 4 2 1 3 1
Output
5

nb: mari kita bertukar source code :D
1 jempol




zegova
192
16
penanya
· 10 tahun, 8 bulan yang lalu · 2 jempol

Ini share dari saya, setelah di coba di compile di web ini ternyata banyak yang di restrict sehingga ga bisa jalan. Silakan di jalanin di php compiler masing2 ya buat di coba :D

<?php
function solve(){

$line0 = trim(fgets(STDIN)); 
$n = $line0;
$line1 = trim(fgets(STDIN));
$data = explode(" ", $line1);

$isi = array();
for ($i = 0; $i<$n; $i++){
	$c = $data[$i];
	if ($c === 4){
		$isi[3]++;
	}
	else {
      	$temp=$c-1;
		$isi[$temp]++;
	}
}

$isi[0] -= $isi[2];
if ($isi[0] < 0) {
	$isi[0] = 0;
}
$isi[3] += $isi[2];
$isi[0] += $isi[1]*2;
$isi[0] = ceil($isi[0]/4);

echo $isi[0]+$isi[3];

}

function run(){

solve();
}

run();
?>

dwhite
198
49
· 10 tahun, 8 bulan yang lalu · 1 jempol

wah mantap gan, ini versi saya gan, sederhana memang tapi mudah-mudahan menjawab dari soal yang agan berikan... :D

<?php
	function peserta($sekolah){
		echo "Jumlah sekolah : ".$sekolah."<br>";
		echo "Siswa Per Sekolah: ";
		for($i=0;$i<$sekolah;$i++){
			$b = rand(1,4);
			echo $b." ";
			$jumlah = $jumlah + $b;
		}
		echo "<br>Total Siswa : ".$jumlah;
		return taxi($jumlah);
	}

	function taxi($jumlah){
		$jTaxi = $jumlah/4;
		return $jTaxi;
	}

	echo "<br>Jumlah Taxi Minimum : ".ceil(peserta(5));
?>

dwhite
198
49
· 10 tahun, 8 bulan yang lalu · 0 jempol

wah mantap gan, ini versi saya gan, sederhana memang tapi mudah-mudahan menjawab dari soal yang agan berikan... :D

<?php
	function peserta($sekolah){
		echo "Jumlah sekolah : ".$sekolah."<br>";
		echo "Siswa Per Sekolah: ";
		
		//Random Siswa untuk masing-masing sekolah dengan batas maksimum 4siswa per sekolah
		for($i=1;$i<=$sekolah;$i++){
			//random minimum 1 maximum 4
			$b = rand(1,4);
			//cetak jumlah siswa
			echo $b." ";
			//jumlahkan seluruh siswa yang mengikuti kegiatan tersebut
			$jumlah = $jumlah + $b;
		}
		//cetak total siswa/
		echo "<br>Total Siswa : ".$jumlah;
		//panggil fungsi untuk menghitung jumlah minimum taxi yang digunakan
		return taxi($jumlah);
	}

	function taxi($jumlah){
		//hitung jumlah taxi minimum dengan membagi jumlah siswa dibagi 4
		return $jumlah/4;
	}

	//Isi Jumlah Sekolah
	echo "<br>Jumlah Taxi Minimum : ".ceil(peserta(5));
?>

*edited dari postingan diatas, ditambah komentar biar yang lain ikutan belajar ;)

mas ganis, kalo bisa tambahin fungsi edit di postingan yang kita buat, takut-takut ada salah-salah pas posting... :)

zegova
192
16
penanya
· 10 tahun, 8 bulan yang lalu · 0 jempol

Solusinya menarik, tapi setelah dicoba ada beberapa hasil yang tidak sesuai, misal

Input
3
3 3 2

Output
2
seharusnya 3

Yang perlu diperhatikan adalah setiap siswa yang dari sekolah yang sama harus ada di satu taksi yang sama, tidak boleh misah.

Kalo kasus diatas, berarti 2 siswa dari sekolah yang sama harus pisah, sehingga menghasilkan jawaban yang salah.

Kalo menurut saya begitu kaka. CMIIW

ganis
198
839
· 10 tahun, 8 bulan yang lalu · 0 jempol

wah keren2,, terimakasih mas zegova!

Hm, sepertinya sudah pada tidak sabar mengunggu materi "Penyelesaian Masalah/Logika" ya? hahaha

Uko_Corleone
300
11
· 10 tahun, 8 bulan yang lalu · 0 jempol

iya mas ganis, saya juga gak sabar nunggu, coding itu seru bagi saya :D

dwhite
198
49
· 10 tahun, 8 bulan yang lalu · 0 jempol

wah iya ya gan, saya ga baca bagian itu gan, hmmm, ijin ambil potongan codenya ya gan zegova, belum menemukan alternatif code lagi gan, :(

<?php
	function peserta($sekolah){
		echo "Jumlah sekolah : ".$sekolah."<br>";
		echo "Siswa Per Sekolah: ";
		
		//Random Siswa untuk masing-masing sekolah dengan batas maksimum 4siswa per sekolah

		$taxi = array();
		for($i=1;$i<=$sekolah;$i++){
			//random minimum 1 maximum 4
			$b = rand(1,4);
			//cetak jumlah siswa
			echo $b." ";
			//jumlahkan seluruh siswa yang mengikuti kegiatan tersebut
			$jumlah = $jumlah + $b;

			//Cek Jumlah siswa per sekolah
			if ($b === 4){
				$taxi[3]++;
			}
			else {
		      	$temp=$b-1;
				$taxi[$temp]++;
			}
		}

		/*------------------------------------------*
		* This Code inspired by : zegova 			*
		* cek siswa dan hitung jumlah taxi Minimum 	*
		*-------------------------------------------*/
		$taxi[0] -= $taxi[2];
		if ($taxi[0] < 0) {
			$taxi[0] = 0;
		}
		$taxi[3] += $taxi[2];
		$taxi[0] += $taxi[1]*2;
		$taxi[0] = ceil($taxi[0]/4);
		
		//cetak totl siswa/
		echo "<br>Total Siswa : ".$jumlah;
		//panggil fungsi untuk menghitung jumlah minimum taxi yang digunakan
		return $taxi[0]+$taxi[3];
	}

	//taxi Jumlah Sekolah
	echo "<br>Jumlah Taxi Minimum : ".peserta(5);
?>