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のようですね
さらに返却される値はString
っぽい。
とゆうかのI/O周り、とりあえずScanner
だけで進めてしまっていた感じがあるので、再度勉強しこちらの記事を更新していきたいと思います
一旦は習うより慣れろの精神で、使っていこうかと思いますw