3回目のAtCoder Daily Training 3問完答

こんにちは。本日も水曜日のAtCoder Daily Trainingに参加しました。EASYです。

今回は解けそうな3問ミスなしでいけました。ひとまず安心。
この間のABCでめちゃめちゃだったので、少しですがchar型や配列を勉強して挑みました。
まだ「これってなんだっけ?」と立ち止まってしまうのですが、少しずつできているようなきがします。

1問目「Exponential or Quadratic」

A - Exponential or Quadratic


累乗の計算をするMath.powを知らなくて、大きな値だとパンクしてしまい時間がかかりました。(for文で書いてた)

Math.powを用いて引き算の正負を判定するという形にたどり着いてAC。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        
        if (Math.pow(2, n) - n * n > 0){
            System.out.print("Yes"); 
        } else {
            System.out.print("No");
        }
    }
}

2問目「Pawn on a Grid」

B - Pawn on a Grid

二重のfor文に辿り着くまでに随分時間がかかってしまいました。
よく考えれば、二次元配列も頭からすっぽ抜けていました・・・。が、なんとかAC

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int h = sc.nextInt();
        int w = sc.nextInt();
        
        int result = 0;
        
        for (int i = 0; i < h; i++) {
            String str[] = sc.next().split("");
            for (int j = 0; j < w; j++) {
                if (str[j].equals("#")) {
                    result += 1;
                }
            }
        }
        
        System.out.print(result);
    }
}

3問目「LOOKUP」

C - LOOKUP

これは配点的にはおそらくB問題かと思うのですが、前の日にPaizaの問題集で部分一致の問題を解いており、完全にラッキー問題でした。
3分くらいで、これが一番はやく解けました。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String t = sc.next();
        
        int result = s.indexOf(t);
        
        if (result != -1) {
            System.out.print("Yes");
        } else {
            System.out.print("No");
        }
    }
}

4問目「TaK Code」

D - TaK Code

3問いけたので、とりあえず挑戦してみようと思ったのですが、むりでした・・・。

蓋を開けてみると、意外と愚直にやる問題のようです。3問解くのに40分かかってたら無理ですね・・・。


今週はABCに参加できないので、トレーニングだけでも参加できて良かったです。