[Advance Programming] Soal Case Dan Pembahasan Dalam Bahasa Java - II

Why-is-Java-the-best-programming-Language

Assalamualaikum wr.wb
Bismillahirrahmannirrahim…
Pada postingan kali ini saya akan melanjutkan tentang soal bahasa pemrograman bahasa Java yang sebelumnya sudah saya bahas di [Advance Programming] Soal Case Dan Pembahasan Dalam Bahasa Java – I. Disini 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.

1. Migrasi Burung
Kamu diminta untuk membantu studi tentang populasi burung yang bermigrasi dibelahan bumi. Setiap jenis burung yang unik akan di identifikasi menggunakan sebuah Integer  . Setiap burung tertentu terlihat, ID dari setiap burung itu akan ditambahkan ke Array mu. Kamu harus menemukan tipe burung manakah yang paling banyak terlihat. jika dua atau lebih tipe burung terlihat dengan jumlah yang sama, maka pilih burung dengnan  dengan ID terkecil.

Deskripsi Fungsi :
1. Integer n  menunjukan jumlah elemen pada array.
2. Integer Array , ar , dengan elemen array yang menunjukkan masing – masing tipe ID burung tersebut.

Input Format :
- Baris pertama menunjukkan jumlah elemen pada Array
- Baris kedua mendeskripsikan array ar , yang setiap elemennya menunjukkan tipe burung tersebut ,dengan ID nya yaitu  1 , 2 , 3, 4 dan 5.


Output Format :
ID tipe burung yang paling banyak terlihat.

Sample Input :
6
1 4 4 4 5 3


Sample Output :
4


Penjelasan :
Perbedaan tipe burung yang muncul berdasarkan frekuensi kemunculan:
  • Tipe 1 : 1 Burung
  • Tipe 2 : 0 Burung
  • Tipe 3 : 1 Burung
  • Tipe 4 : 3 Burung
  • Tipe 5 : 1 Burung
Lalu, tipe burung yang paling banyak terlihat adalah tipe 4  jadi kita print nomer 4

Jawaban :

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    static int migratoryBirds(int n, int[] ar) {
        // initialize variabel
        int count = 0;
        int[] res = new int[5];
        int max = 0;
        int answer = 0;
        
        // hitung jumlah burung dengan menggunakan looping
        // jumlah burung akan dipisahkan berdasarkan tipe dengan Array
        for(int i = 0;i < n; i++){ 
            switch(ar[i]){
                case 1 : 
                    res[0]++;
                case 2 :
                    res[1]++;
                case 3 :
                    res[2]++;
                case 4 :
                    res[3]++;
                case 5 :
                    res[4]++;
            } 
        }
        
        // ketika sudah terhitung jumlah burung berdasarkan tipe
        // lalu cari jumlah yang paling besar.
        for(int j = (res.length - 1) ; j > 0; j--){
            if(max <= res[j]){ // jika max lebih kecil     
                    max = res[j]; // maka max akan diganti dengan res[j]
                    answer = j; // dan answer akan diganti dengan tipe burung        
            }
        }
        return answer;
    }

    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 = migratoryBirds(n, ar);
        System.out.println(result);
    }
}

Solusi Logika :
1. Buat variabel count, max, answer dan juga Array res
2. Hitung jumlah burung menggunakan looping , jumlah burung akan dibedakan berdasarkan tipe.
3. Jumlah burung kita masukkan ke array res.
4. Ketika sudah terhitung jumlah burung berdasarkan tipe, cari jumlah burung yang paling sering terlihat.
5. Menggunakan IF dan juga Looping kita akan menemukan jawabannya.

2. Pedagang Kaos Kaki
John bekerja di sebuah toko kaos. dia mempunyai banyak kaos kaki yang harus ia jual berdasarkan warnanya.

kamu akan diberikan Array yang mewakili warna dari setiap kaos kaki yang ada. Tentukan berapa banyak pasang kaos kaki yang memiliki warna yang sama.

Katakan saja n adalah jumlah semua kaos kaki dengan label i yang menunjukan warna kaos kaki tersebut. kamu akan diberikan Array c , yang anggotanya adalah kaos kaki i . John akan menjual kaos kaki itu sebanyak – banyak nya. Tentukan berapa kaos kaki yang bisa ia jual.

Input Format :
Baris pertama mengandung integer n yang mewakili jumlah kaos kaki.
Baris kedua mengandung Array c  yang anggotanya adalah kaos kaki dengan warna yang berbeda.

Output Format :
Print total pasangan kaos kaki yang sama.

Sample Input :
9
10 20 20 10 10 30 50 10 20

Sample Output :
 3 

Penjelasan :
image
Kaos kaki yang memiliki pasangan ada 3

Jawab :

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    static int sockMerchant(int n, int[] ar) {
        // initialize variabel
        int count = 0;
        // lalu urutkan Array dari yang terkecil ke terbesar
        Arrays.sort(ar);
        
        // Gunakan looping untuk mengecek array satu persatu.
        for(int i = 0; i < n-1;i++){
            if(ar[i] == ar[i+1]){ // cek array dengan array berikutnya
                count = count + 1; // lalu count
                i = i+1; // dan lompati ke index berikutnya
            }
        }
        return count;
    }

    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 = sockMerchant(n, ar);
        System.out.println(result);
    }
}



Solusi Logika :
1. Kita buat variabel count
2. Urutkan Array dari yang terkecil ke terbesar, menggunakan Arrays.sort
3. Gunakan Looping untuk mengecek Array satu persatu.
4. Jika , element array dengan array berikutnya sama.
5. Maka , count tambah satu dan lompat ke index berikutnya.

3. Menghitung Lembah
Gary adalah penggemar hiking. Dia mendaki dengan sangat teliti, dia sangat memperhatikan tentang typografi. Selama dia mendaki , dia selalu mengambil langkah n dengan tepat. Dan setiap langkah yang dia ambil, dia mencatat apakah itu uphill atau downhill  langkah.  Gary mendaki dari awal sampai akhir pada level permukaan air laut. Kita mendefisinikan sebagai berikut :
  • sebuah gunung diartikan sebuah langkah yang berjalan di atas permukaan air laut, mulai dari langkah naik dan diakhiri dengan langkah turun.
  • sebuah lembah diartikan sebuah langkah yang berjalan di bawah permukaan air laut ,mulai dari langkah turun dan diakhiri dengan langkah naik.
Diberikan sebuah urutan langkah Gary yang naik dan turun selama dia mendaki, temukan dan print jumlah Lembah  yang ia lewati.

Input Format :
Baris pertama berisi integer jumlah n yang menunjukkan jumlah langkah yang didaki Gary.
Baris kedua berisi karakter yang berjumlah n , Karakter yang diinputkan hanyalah U dan D.  (dimana D mengindikasian Bawah dan U yang mengindikasian Atas)

Ouput Format :
Jumlah lembah yang telah dilewati Gary.

Sample Input :
8
UDDDUDUU

Sample Output :
1

Penjelasan :
Jika kita andaikan _ adalah permukaan air laut, / adalah langkah naik , dan \ untuk langkah turun  , dapat disimpulkan bahwa pendakian Gary seperti ini :

_/\      _
   \    /
    \/\/

Jawab :

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    static int countingValleys(int n, String s) {
        // initialize variabel
        int valley = 0;
        int level = 0;
        
        // kita gunakan looping untuk mengecek level permukaan
        for(char current:s.toCharArray()){
            // jika U maka level tambah + 1
            if(current == 'U') ++level;
            // jika D maka level tambah - 1
            if(current == 'D') --level;
            
            // kita berfokus pada level permukaan 
            // karena setiap lembah pasti akan diakhiri dengan
            // level permukaan air laut dan Langkah 'Naik'
            if(level == 0 && current == 'U'){
                valley++;  // jika benar maka valley tambah.
            }
        }
        
        return valley;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String s = in.next();
        
        int result = countingValleys(n, s);
       
        System.out.println(result);
        in.close();
    }
}


Solusi Logika :
1. Kita buat variabel valley dan level
2. Lalu kita gunakan Looping untuk mengecek permukaan.
3. Kita akan berfokus level permukaan, karena setiap lembah pasti berlevel pada permukaan air laut ( 0 ) , dan selalu diakhiri dengan langkah ‘Naik’.
4. Jadi kita gunakan IF untuk mengecek dua kondisi tersebut.

0 Response to "[Advance Programming] Soal Case Dan Pembahasan Dalam Bahasa Java - II"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel