2回目のAtCoder Daily Training EASY

プログラミング、続いています。
paizaスキルチェックのC問題はレートが低い順に1日1題程度解いています。
完答したり、しなかったり、ぼちぼちです。

現在のレートです。

この間も載せとけば良かったな。
現時点では、自分のレートより低い問題ばかり解いているので、なかなか上がらないですね。


さて、本日も水曜の16時枠でAtCoder Daily Training EASY部門に挑戦しました。
今回は、1時間まるまる使いました。時間が足りずに終わる、という感じで、前回より解ける問題が増えて嬉しかったです。

1問目「Spread」

A - Spread

標準入出力ができれば簡単です。
タイムは3:06でした。もっと早くできそうです。
上位の方は1分台ですね〜一瞬ですね;

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String S = sc.nextLine();
        String[] Ssplit = S.split("");
        
        for (int i = 0; i < Ssplit.length; i++) {
            System.out.print(Ssplit[i]);
            if (i != Ssplit.length - 1) {
                System.out.print(" ");
            }
        }
        
    }
}

2問目「Adjacent Squares」

A - Adjacent Squares

いい感じにかけた!と思ったら、答えミスでやり直しになりました。
よく見てみると、(1, 1)のみなどのことを考慮していませんでした。

再提出バージョン

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int h = sc.nextInt(); //たて
        int w = sc.nextInt(); //よこ
        int r = sc.nextInt();
        int c = sc.nextInt();
        
        if (h == 1 && w == 1) {
            System.out.print(0);
        } else if (h == 1 && w >= 1) {
            if (c == 1 || c == w) {
                System.out.print(1);
            } else {
                System.out.print(2);
            }
        } else if (h >= 1 && w == 1) {
            if (r == 1 || r == h) {
                System.out.print(1);
            } else {
                System.out.print(2);
            }
        } else if (r == 1 || r == h) {
            if (c == 1 || c == w) {
                System.out.print(2);
            } else {
                System.out.print(3);
            }
        } else if (c == 1 || c == w) {
            if (r == 1 || r == h) {
                System.out.print(2);
            } else {
                System.out.print(3);
            }
        } else {
            System.out.print(4);
        }
        
    }
}


解説を読みましたが、周りに解が存在するかどうか調べるという発想は、あったもののやり方を考える前に「大変かも!」と後回しにしてしまい、結局場合分で時間もかかったり、ミスをしたりと・・・
また後日やってみようと思います。

同値関係ってプログラミングで非常に大事ですね・・・・。

3問目「Booby Prize」

B - Booby Prize

ArrayListを2つ用意して、一方を昇順か降順に並び替えた上で、ブービー賞の人の点数を取得し、並び替えてないリストからその値のインデックスを取得する、という方法をとりました。

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); 
        ArrayList<Integer> a = new ArrayList<>();
        ArrayList<Integer> syozyun = new ArrayList<>();
        
        for (int i = 0; i < n; i++) {
            a.add(i, sc.nextInt());
            syozyun.add(a.get(i));
        }
        

        Collections.sort(syozyun);
        int num = syozyun.get(n - 2);
    
        
        System.out.print(a.indexOf(num) + 1);
    }
}

はじめは、

ArrayList <Integer> syozyun = a;

と書いていたのですが
なぜか、syozyunのリストを並び替えるとaまで並び替えが起こるという現象が起きて、????という感じで、結局この書き方で通りました。

まだArrayListを使うのが不安です。
講座復習必須。

4問目「Pentagon」

B - Pentagon

これは、途中まで書けたけど、回答が上手くいかずタイムアップになってしまいました。

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String A = sc.nextLine(); 
        String B = sc.nextLine(); 
        
        String[] type1 = {"AB", "BA", "BC", "CB", "CD", "DC", "DE", "ED", "EA", "AE"};
        String[] type2 = {"AC", "CA", "AD", "DA", "BE", "EB", "BD", "DB", "CE", "EC"}; //10
        
        for (int i = 0; i < 10; i++) {
            
            if (A.equals(type1[i])) {
                if (B.equals(type1[i])){
                    System.out.print("Yes");
                    break;
                } else {
                    System.out.print("No");
                    break;
                }
            } else { //type2にAが当てはまる
                if (B.equals(type2[i])){    
                    System.out.print("Yes");
                    break;
                } else {
                    System.out.print("No");
                    break;
                }
            }
        }
    }
}

これだと、type1にあてはまるものしか正常に動作しません。
言語化できないですが、このコードがダメな理由はわかります。

解説は、短いか長いかで判断するようです。
2種類しかないので、type2までは要らなかったですね。



5問目はみる暇もありませんでした・・・
また時間のあるときに。

順位は13でした。前回より+1位ですが、解けた問題は増えたので、この間より満足してます。