From 522f0c79cca9ca52bebf64c7973acae6688bb182 Mon Sep 17 00:00:00 2001 From: 202410715031 MUHAMAD ALFARIZKY <202410715031@mhs.ubharajaya.ac.id> Date: Sat, 10 May 2025 00:18:29 +0700 Subject: [PATCH] Update README.md --- README.md | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/README.md b/README.md index 8326296..140d9e1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,87 @@ # Bersalaman +# Strategi Penyelesaian Soal Bersalaman + +## Deskripsi Masalah + +Pada soal ini, diberikan sejumlah orang dalam sebuah pertemuan keluarga. Beberapa orang hadir bersama pasangannya, sementara yang lain datang sendiri. Setiap orang akan saling bersalaman, kecuali dengan pasangannya sendiri. Tugasnya adalah menghitung total jumlah salam yang terjadi dalam pertemuan ini. + +## Format Input + +Setiap baris input berisi dua angka yang dipisahkan oleh satu spasi: + +* Angka pertama (`n`): Jumlah total orang yang hadir (minimal 2, maksimal 1000) +* Angka kedua (`p`): Jumlah pasangan yang hadir (setiap pasangan terdiri dari 2 orang) + +Contoh Input: + +``` +4 0 +6 2 +5 4 +``` + +## Format Output + +Output adalah jumlah total salaman yang terjadi untuk setiap baris input. + +Contoh Output: + +``` +h#1: 6 +h#2: 14 +h#3: 8 +``` + +## Strategi Penyelesaian + +1. **Hitung Total Kombinasi Salam** + Gunakan rumus kombinasi untuk menghitung jumlah total pasangan yang mungkin: + $C(n, 2) = \frac{n (n - 1)}{2}$ + Ini akan menghitung jumlah cara memilih 2 orang dari `n` orang untuk salaman. + +2. **Kurangi Salam Antar Pasangan** + Jika ada `p` pasangan, maka ada `p` pasang orang yang tidak boleh saling bersalaman. Setiap pasangan akan mengurangi 1 salaman, sehingga perlu mengurangi `p` dari hasil langkah 1. + +3. **Cetak Hasil** + Format hasil sesuai dengan contoh, menggunakan nomor kasus (h#1, h#2, dst.) untuk setiap baris input. + +## Pseudocode + +``` +function hitungSalaman(n, p): + total_salaman = (n * (n - 1)) // 2 + salaman_terlarang = p + hasil = total_salaman - salaman_terlarang + return hasil + +// Baca setiap baris input dan proses +for setiap baris dalam input: + n, p = pisahkan angka dalam baris + hasil = hitungSalaman(n, p) + cetak("h#: ") +``` + +## Kompleksitas Waktu + +Algoritma ini memiliki kompleksitas O(1) per kasus, karena operasi kombinasi dan pengurangan pasangan bersifat konstan meskipun jumlah orang (`n`) sangat besar. + +## Uji Coba + +Berikut beberapa contoh uji coba: + +### Input + +``` +4 0 +6 2 +5 4 +``` + +### Output yang Diharapkan + +``` +h#1: 6 +h#2: 14 +h#3: 8 +```