Lompat ke konten Lompat ke sidebar Lompat ke footer

Input Output Java pada Competitive Programming

Penggunaan Java pada 'competitive programming' bukanlah sesuatu yang disarankan karena input dan output-nya akan berjalan lambat, dan memang sangat lambat. Namun demikian, pada artikel ini akan dibahas beberapa cara untuk mengatasi kesulitan tersebut dan mengubahnya TLE ke AC agar permasalahan tersebut dapat teratasi.


Sebelum lebih lanjut mempelajari materi tentang Input Output Java pada Competitive Programming, terlebih dahulu pelajari materi tentang: Mencetak Nilai Output Java Beserta Contohnya, Perbedaan Antara print() dan println() Java, dan Format Output Java Beserta Contohnya.

Scanner Class (mudah, sedikit pengetikan, tapi tidak direkomendasikan karena sangat lambat): Pada banyak kondisi, akan didapati TLE ketika menggunakan class tersebut. Class ini menggunakan method built-in nextInt(), nextLong(), nextDouble untuk membaca object tertentu setelah menginisiasi object scanner dengan input stream atau System.in).

Contoh:

// Menjalankan program

// menggunakan Scanner.

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Scanner;


public class Main {


public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

int n = s.nextInt();

int k = s.nextInt();

int count = 0;


while (n-- > 0

{

int x = s.nextInt();

if (x % k == 0)

count++;

}


System.out.println(count);

}


}


BufferedReader (cepat, tapi memerlukan banyak pengetikkan): Class Java.io.BufferedReader Java membaca teks dari sebuah stream tunggal character-input, dimana karakter buffer menyediakan karakter, array, dan baris pembacaan yang efisien. Dengan method ini, dapat dilakukan parsing nilai untuk setiap waktu untuk pengetikkan yang sesuai. Proses pembacaan multiple word dari penambahaan baris tunggal ke kompleksitasnya dari penggunaan StringTokenizer dan lainnya sangat tidak direkomendasikan, dimana hal tersebut hanya diperbolehkan dengan sebuah waktu running sebesar 0.89, namun tetap saja membutuhkan banyak sekali pengetikkan secara bersamaan dan hal ini sudah pasti tidak direkomendasikan.

Contoh:

// Menjalankan program

// menggunakan BufferedReader.

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.StringTokenizer;


public class Main {


public static void main(String[] args)

throws IOException

{


BufferedReader br = new BufferedReader(

new InputStreamReader(System.in));


StringTokenizer st

= new StringTokenizer(br.readLine());


int n = Integer.parseInt(st.nextToken());


int k = Integer.parseInt(st.nextToken());


int count = 0;


while (n-- > 0) {

int x = Integer.parseInt(br.readLine());

if (x % k == 0)

count++;

}


System.out.println(count);

}


}


Class Userdefined FastReader (yang menggunakan bufferedReader dan StringTokenizer): Method ini menggunakan keunggulan waktu dari BufferedReader dan StringTokenizer, serta keuntungan dari metode yang ditentukan pengguna untuk pengetikan yang lebih sedikit sehingga input menjadi lebih cepat. Ini diterima dengan waktu 1,23 detik dan metode ini sangat direkomendasikan karena mudah diingat dan cukup cepat untuk memenuhi kebutuhan sebagian besar pertanyaan dalam pengkodean kompetitif.

Contoh:

// Menjalankan program

// menggunakan FastReader.

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;

import java.util.StringTokenizer;


public class Main {


static class FastReader {

BufferedReader br;

StringTokenizer st;


public FastReader()

{

br = new BufferedReader(

new InputStreamReader(System.in));

}


String next()

{


while (st == null || !st.hasMoreElements()) 

{

try {st = new StringTokenizer(br.readLine());}

catch (IOException e) 

{e.printStackTrace();}

}


return st.nextToken();

}


int nextInt() { return Integer.parseInt(next()); }


long nextLong() { return Long.parseLong(next()); }


double nextDouble()

{return Double.parseDouble(next());}


String nextLine()

{

String str = "";

try {str = br.readLine();}

catch (IOException e) 

{e.printStackTrace();}

return str;

}


}


public static void main(String[] args)

{

FastReader s = new FastReader();

int n = s.nextInt();

int k = s.nextInt();

int count = 0;


while (n-- > 0

{

int x = s.nextInt();

if (x % k == 0)

count++;

}


System.out.println(count);

}


}


Baca Juga:
Menggunakan Class Reader: Class ini menggunakan inputDataStream untuk membaca aliran data dan menggunakan method read() dan metode nextInt() untuk mengambil input. Sejauh ini, cara ini merupakan cara tercepat untuk menerima masukan, namun sulit untuk diingat dan pendekatannya rumit. Meskipun ini sangat cepat, class jelas bukan method yang mudah untuk diingat.

Contoh:

// Menjalankan program

// menggunakan Class Reader.

import java.io.DataInputStream;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;

import java.util.StringTokenizer;


public class Main {


static class Reader {

final private int BUFFER_SIZE = 1 << 16;

private DataInputStream din;

private byte[] buffer;

private int bufferPointer, bytesRead;


public Reader()

{

din = new DataInputStream(System.in);

buffer = new byte[BUFFER_SIZE];

bufferPointer = bytesRead = 0;

}


public Reader(String file_name) throws IOException

{

din = new DataInputStream(

new FileInputStream(file_name));

buffer = new byte[BUFFER_SIZE];

bufferPointer = bytesRead = 0;

}


public String readLine() throws IOException

{

byte[] buf = new byte[64]; // line length

int cnt = 0, c;

while ((c = read()) != -1) {

if (c == '\n') {

if (cnt != 0) {

break;

}

else {continue;}

}

buf[cnt++] = (byte)c;

}

return new String(buf, 0, cnt);

}


public int nextInt() throws IOException

{

int ret = 0;

byte c = read();

while (c <= ' ') {

c = read();

}


boolean neg = (c == '-');

if (neg)

c = read();


do {

ret = ret * 10 + c - '0';

} while ((c = read()) >= '0' && c <= '9');

if (neg)

return -ret;

return ret;

}


public long nextLong() throws IOException

{

long ret = 0;

byte c = read();

while (c <= ' ')

c = read();

boolean neg = (c == '-');

if (neg)

c = read();


do {

ret = ret * 10 + c - '0';

while ((c = read()) >= '0' && c <= '9');


if (neg)

return -ret;

return ret;

}


public double nextDouble() throws IOException

{

double ret = 0, div = 1;

byte c = read();

while (c <= ' ')

c = read();

boolean neg = (c == '-');

if (neg)

c = read();


do {

ret = ret * 10 + c - '0';

while ((c = read()) >= '0' && c <= '9');


if (c == '.'

{

while ((c = read()) >= '0' && c <= '9') {

ret += (c - '0') / (div *= 10);}

}


if (neg)

return -ret;

return ret;

}


private void fillBuffer() throws IOException

{

bytesRead = din.read(buffer, bufferPointer = 0,

BUFFER_SIZE);

if (bytesRead == -1)

buffer[0] = -1;

}


private byte read() throws IOException

{

if (bufferPointer == bytesRead)

fillBuffer();

return buffer[bufferPointer++];

}


public void close() throws IOException

{

if (din == null)

return;

din.close();

}


}


public static void main(String[] args)

throws IOException

{

Reader s = new Reader();

int n = s.nextInt();

int k = s.nextInt();

int count = 0;

while (n-- > 0) {

int x = s.nextInt();

if (x % k == 0)

count++;

}


System.out.println(count);

}


}


Artikel ini didedikasikan kepada: Tandria Shinta Ayuningtyas, Taufik Hidayat, Tegar Fachrurozi Suryakusuma, Thirza Ronaa Rachmawati, dan Urlia Purmalasari.

5 komentar untuk "Input Output Java pada Competitive Programming"

  1. Apa yang dimaksud dengan competitive programming?

    BalasHapus
    Balasan
    1. Kompetitif programming adalah program yang berkompetisi :D.

      Hapus
    2. Dan program yang kalah berkompetisi akan dikeluarkan dari perlombaan :D.

      Hapus
    3. Pemrograman kompetitif adalah bentuk dari olahraga pikiran yang melibatkan peserta yang mencoba memprogram sesuai dengan spesifikasi yang telah diberikan.

      Hapus
    4. Pemrograman kompetitif pada Java merupakan olahraga dimana kontestan memecahkan suatu permasalahan algoritmik dalam batas waktu menggunakan bahasa pemrograman yang telah ditentukan. Hal ini bertujuan untuk menguji tingkat keterampilan pemecahan masalah, pengetahuan tentang algoritma, dan kemapuan untuk menulis kode program yang efisien.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -