目次
はじめに
競技プログラミングの鉄則 演習問題集 の「A04 - Binary Representation 1」という問題の自分が書いた解答例。著者の本を読んで、それから、コーディングしています。コーディングするときに詰まったポイントについて書いているので、ぜひ。
問題文
解答例
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K = sc.nextInt(); int[] P = new int[N]; for (int i = 0; i < P.length; i++) { P[i] = sc.nextInt(); } int[] Q = new int[N]; for (int i = 0; i < Q.length; i++) { Q[i] = sc.nextInt(); } sc.close(); boolean flag = false; for (int i = 0; i < P.length; i++) { for (int j = 0; j < Q.length; j++) { if (K == (P[i] + Q[j])) { flag = true; } } } if (flag) { System.out.println("Yes"); } else { System.out.println("No"); } } }
公式の解答例はこちら「https://github.com/E869120/kyopro-tessoku/blob/main/codes/java/chap01/answer_A03.java」
解説
公式の解答例では{}が省略されていたり、改行されていなかったりする。そちらの方がメモリを圧迫しないので、いいと思う。だが、実際に書くときは見やすさや見慣れている、書きやすい方を使ったらいいと思う。
ポイントはFlagを使う所かと。YesかNoで問題に答えるときは時は、Flagを立てて、そこに結果を保存するということがよく使われる。
// フラグを立てて boolean flag = false; for (int i = 0; i < P.length; i++) { for (int j = 0; j < Q.length; j++) { // もし該当する数字があったら if (K == (P[i] + Q[j])) { // 結果を保存する flag = true; } } } // フラグの結果に応じて出力を変える。TrueならYes,FalseならNo。 if (flag) { System.out.println("Yes"); } else { System.out.println("No"); }
後は、Javaの文法になる。「=」と「==」の違い。
- 「=」は代入するときに使う。例えば、Aを5を代入する。
- 「==」は比較するときに使う。例えば、AはBと同じかどうか。
もう一つのポイントはforを2重で使用していること。これはマス目を思い浮かべると分かりやすい。
所感
意外とサクサクできてうれしかった。このちょーしで頑張るぞー!