プログラミング、続いています。
paizaスキルチェックのC問題はレートが低い順に1日1題程度解いています。
完答したり、しなかったり、ぼちぼちです。
現在のレートです。
この間も載せとけば良かったな。
現時点では、自分のレートより低い問題ばかり解いているので、なかなか上がらないですね。
さて、本日も水曜の16時枠でAtCoder Daily Training EASY部門に挑戦しました。
今回は、1時間まるまる使いました。時間が足りずに終わる、という感じで、前回より解ける問題が増えて嬉しかったです。
1問目「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」
いい感じにかけた!と思ったら、答えミスでやり直しになりました。
よく見てみると、(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」
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」
これは、途中まで書けたけど、回答が上手くいかずタイムアップになってしまいました。
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位ですが、解けた問題は増えたので、この間より満足してます。