' P '

whatever I will forget

Java bufferedReader

Javaって書き方によって処理速度がかなり変わる言語ですよね... (まあ言語によってもちろん書き方によって速度が変わるはずですが)
AtCoderで普通に処理速度がやたら早い人がいるので、何が違うんだろう?と比較してみたら、inputの値の格納時点に違いがあることがわかりました!

下記のように普通にScannerを使う場合

import java.util.*;
 
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int h = sc.nextInt();
        int w = sc.nextInt();
        char[][] s = new char[h][w];
        for(int i=0; i<h; i++) {
            s[i] = sc.next().toCharArray();
        }
        sc.close();
        
        // continue
  • 結果
    118ms

下記のようにbufferedReaderを使う場合

import java.io.*;

class MainC {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sa = br.readLine().split(" ");
        int h = Integer.parseInt(sa[0]);
        int w = Integer.parseInt(sa[1]);
        char[][] s = new char[h][w];
        for(int i=0; i<h; i++) {
            s[i] = br.readLine().toCharArray();
        }
        br.close();
   
        // continue
  • 結果
    80ms

これだけで差がでるって面白いですね!

bufferedReader

ここに関してはさらに深く理解する必要がありますが、基本的にはfileを読み込む時に使うclassのようですね

www.javadrive.jp

さらに返却される値はStringっぽい。
とゆうかのI/O周り、とりあえずScannerだけで進めてしまっていた感じがあるので、再度勉強しこちらの記事を更新していきたいと思います

一旦は習うより慣れろの精神で、使っていこうかと思いますw