[Advance Programming] Soal Case Dan Pembahasan Dalam Bahasa Java - I
Assalamualaikum wr.wb
Bismillahirrahmannirrahim…
Pada postingan kali ini saya akan membahas tentang bahasa pemrograman bahasa Java . Disini sini saya akan memberikan beberapa soal dan pembahasan dari setiap soal tersebut. Setiap soal yang tersedia saya ambil dari HackerRank yang sudah saya terjemahkan ke dalam bahasa indonesia. Soal bisa berbentuk soal cerita dan logika yang bersifat Advance.
(PENTING : Jika Syntax Terpotong Coba Gunakan DESKTOP VIEW atau LANDSCAPE)
1. Lilin Kue Ulang Tahun.
Kamu bertanggung jawab kue ulang tahun keponakan perempuan mu dan kamu harus memberikan satu lilin disetiap tahun kue dari total umurnya. Ketika dia meniup lilin tersebut , dia hanya bisa memadamkan lilin yang paling tinggi.
Sebagai contoh, jika keponakan mu berumur 4 tahun, maka kue nya akan memiliki 4 lilin , dengan tinggi masing – masing lilin yaitu 3 , 2 , 1 , 3 . Maka dia hanya bisa meniup 2 lilin tertinggi. Karena lilin tertinggi adalah 3 dengan jumlah lilin nya ada 2.
Input Format :
- Baris pertama berisi variabel n , yang menunjukkan jumlah lilin pada kue.
- Baris kedua berisi bilangan bulat i yang dipisahkan spasi, dimana setiap bilangan bulat menggambarkan tinggi lilin.
Output Format:
print jumlah lilin yang berhasil ditiup oleh keponakanmu.
Sample Input :
4 3 2 1 3
Sample Ouput:
2
Penjelasan :
kita punya satu lilin dengan tinggi 1, satu lilin dengan tinggi 2 , lalu dua lilin dengan tinggi 3 , keponakanmu hanya meniup lilin yang paling tinggi , yang berarti dia hanya meniup lilin dengan tinggi = 3 , karena disana ada 2 lilin yang paling tinggi, maka kita print 2.
Jawab :
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int birthdayCakeCandles(int n, int[] ar) {
//initialize variabel yang dibutuhkan
int result = 0;
int max = 0;
//cek satu per satu array ar
for(int a:ar){
if(max < a){ // jika a lebih besar daripada max
max = a; // maka max diganti 1
result = 1; // result akan direset
}else{
if(max == a){ // jika a sama dengan a
result++; // result ditambah
}
}
}
return result;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] ar = new int[n];
for(int ar_i = 0; ar_i < n; ar_i++){
ar[ar_i] = in.nextInt();
}
int result = birthdayCakeCandles(n, ar);
System.out.println(result);
}
}
Solusi Logika :
( Berada pada function birthdayCakeCandles(int n, int[] ar) )
1. Kita buat variabel yang kita butuhkan , dikode itu saya membuat 2 variable result dan max.
2. Cek satu persatu array ar[] dengan looping object.
3. Jika max lebih kecil , maka max diganti dengan nilai pada a. Dan result akan direset menjadi 1
4. Selain itu , jika max == a , maka result bertambah satu.
5. Lalu return result.
2. Penilaian Siswa
Universitas InginTanya punya kebijakan dalam penilaian siswa.
- Setiap siswa menerima grade dalam jangkauan 1 sampai 100.
- grade yang kurang dari 40 dinyatakan gagal.
- jika perbedaan antara grade dan kelipatan 5 berikutnya adalah kurang dari 3, Bulatkan grade sampai kelipatan 5 berikutnya.
- jika nilai grade kurang dari 38 , maka tidak ada pembulatan di nilai tersebut.
diberikan setiap nilai grade oleh setiap jumlah n siswa mr. Sam , tuliskan kode otomatis untuk membulatkan setiap nilai itu. Setiap grade , bulatkan berdasarkan peraturan yang tersedia.
Input Format
- baris pertama mengandung sebuah integer yang menunjukan jumlah siswa .
- lalu setiap baris i dari n selanjutnya mengandung sebuah integer grade , yang menunjukkan nilai grade siswa.
Output Format
print setiap nilai grade siswa yang sudah dibulatkan sesuai peraturan.
Sample Input
4 73 67 38 33Sample Output
75 67 40 33Penjelasan :
1. Murid 1 , menerima grade = 73 , and kelipatan 5 selanjutnya dari 73 ke 75 selisihnya adalah 2 , karena 75 – 73 < 3 , maka nilai grade nya akan dibulatkan ke 75.
2. Murid 2 , menerima grade = 67 , dan kelipatan 5 selanjutnya dari 67 ke 70 selisihnya adalah 3 , karena 70 – 67 = 3, maka nilai grade nya tidak akan dibulatkan dan tetap menjadi 67.
3. Murid 3 , menerima grade = 38 , dan kelipatan 5 selanjutnya dari 38 ke 40 selisihnya adalah 2 , karena 40 – 38 < 3 , maka nilai grade nya akan dibulatkan ke 40 .
4. Murid 4, menerima grade dibawah 38 , jadi nilai nya tidak akan dibulatkan dan tetap menjadi 38.
Jawab :
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int[] solve(int[] grades){
int[] res = new int[grades.length]; // initialize array variable
// looping satu persatu nilai pada array grades
for (int i = 0; i < grades.length; i++){
// Cek modulo grades[i] pada kelipatan lima lebih dari 2
// Dan grades[i] TIDAK lebih dari 38
if (grades[i] % 5 > 2 && !(grades[i] < 38)){
//res = nilai array ditambah ( 5 - modulo grades[i] kelipatan 5)
res[i] = grades[i] + (5 - grades[i] % 5);
}else{
//jika tidak nilai tetap
res[i] = grades[i];
}
}
return res;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] grades = new int[n];
for(int grades_i=0; grades_i < n; grades_i++){
grades[grades_i] = in.nextInt();
}
int[] result = solve(grades);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + (i != result.length - 1 ? "\n" : ""));
}
System.out.println("");
}
}
Solusi Logika :
1. Buat array result, kita namai saja res
2. Looping satu persatu nilai pada Array pada variabel grades[].
3. jika , modulo grades[i] pada kelipatan lima lebih dari 2 dan grades[i] TIDAK lebih dari 38.
4. maka , res[i] = nilai array grade[i] ditambah ( 5 – modulo grade[i] kelipatan 5)
5. selain itu, res[i] = grade[i]
3. Pasangan Sum yang Dibagi
kamu diberi array dengan n integer , a0 , a1 , …. an-1 dan sebuah integer positif kita namai variabel k . Temukan dan print nomer dari pasangan (i, j) dimana i < j dan ai + aj adalah kelipatan dari k.
Input Format :
- baris pertama mengandung 2 angka yang dipisahkan spasi masing – masing, n dan k
- baris kedua mengandung n angka yang dipisahkan spasi yang mendeskribsikan value dari masing – masing array a0 , a1 , …. an-1
Output Format : print nomer dari pasangan (i, j) dimana i < j dan ai + aj adalah kelipatan dari k.
Sample Input :
6 3 1 3 2 6 1 2
Sample Output :
5
Penjelasan :
Jawaban :
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int divisibleSumPairs(int n, int k, int[] ar) {
// initialize variabel
int count = 0;
int a = 0;
//cek array satu persatu
for(int i = 0; i < n; i++){
for(int j = 1;j < n;j++){
//sesuai dengan syarat i kurang dari j
if (i < j){
a = ar[i] + ar[j]; // tambahkan kedua array
if (a % k == 0){ //lalu cek apakah a itu kelipatan dari k
count++; // jika iya maka count tambah 1
}
}
}
}
return count;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[] ar = new int[n];
for(int ar_i = 0; ar_i < n; ar_i++){
ar[ar_i] = in.nextInt();
}
int result = divisibleSumPairs(n, k, ar);
System.out.println(result);
}
}
Solution Logic :
1. Siapkan variabel count and a .
2. Cek array ar satu persatu dengan nested looping.
3. Jika, sesuai dengan syarat yaitu i < j .
4. Maka, a = ar[i] + ar[j] dengan kata lain ditambahkan kedua array dengan anggota j and i
5. lalu kita cek lagi, apakah a itu kelipatan dari k , menggunakan modulo
6. jika iya maka count++.
7. return count
0 Response to "[Advance Programming] Soal Case Dan Pembahasan Dalam Bahasa Java - I"
Posting Komentar