taiPyのお悩み解決ブログ

日々の発見をまとめます!

Javaの解答例:ABC085C - Otoshidama , AtCoder Beginners Selection

はじめに

自分用の備忘録。うらやましい問題です。問題文に出てくる彼、設定によってはめっちゃくちゃお金もらってます。

問題文と公式解説

問題文

atcoder.jp

公式解説

atcoder.jp

blog.hamayanhamayan.com

解答例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int Y = sc.nextInt();

        for (int a = 0; a <= N; a++) {
            for (int b = 0; b <= N; b++) {
                int c = N - a - b;
                if (c >= 0) {
                    int money = 10000 * a + 5000 * b + 1000 * c;
                    if (money == Y) {
                        System.out.println(a + " " + b + " " + c);
                        return;
                    }
                }
            }
        }

        System.out.println("-1 -1 -1");
    }
}

メモ

解き方はめちゃくちゃシンプルですね。まずはNとなるようなaとBとCを求めて、その後にお金がちゃんと今回設定された金額と合うかどうかを判断する。ただそれだけですね。なんかプログラミングやこのいう問題を解いて思うことは、まず言語化できる能力が必要だと思いました。まずどんな問題なのか、この問題のポイントは何か、じゃあどうやって解くのか。だいたいこの三つを言語化できればいけますね。細かいところ例えば文法などで困ることもあると思いますがわからないところがしっかりと言語ができて調べた内容も自分ごととして自分の言葉で説明できるようになったら解けるようになってくる気がします。

言ってしまえば伝えたい内容が先にあるのであって、伝える工夫が先にあるわけではないみたいな。