AtCoderとは?
AtCoder(アットコーダー)は、競技プログラミングが無料でできるサービスです。競技プログラミングは、特定の問題をプログラムで解決するアルゴリズムとデータ構造のスキルを競うコンピュータプログラムの競技です。
AtCoderは、プログラマーが競技プログラミングのスキルを向上させ、他のプログラマーと競り合ったり、実力を試したりする場を提供しています。
AtCoder上では、ユーザーがプログラムを書いて提出すると、自動的にそのプログラムがテストケースに対して実行され、正確な解答かどうかが判定されます。
最初の問題
AtCoderはプログラミング初心者向けの記事もあり、今回はその問題集の一番最初の問題を解いていきたいと思います。
今回はJavaで記述をしていきますが、他の言語でも書くことが可能なので今後python,c,php,goなどの言語の解説記事も上げていきたいと思います。
PracticeA – Welcome to AtCoder
問題文
高橋君はデータの加工が行いたいです。
整数 a,b,cと、文字列 s が与えられます。a+b+c の計算結果と、文字列 s を並べて表示しなさい。
制約
- 1≤a,b,c≤1,000
- 1≤∣s∣≤100 https://atcoder.jp/contests/abs/tasks/practice_1
GitHubに解答の模範を載せときます。
コードの解説
最近、久しぶりに競技プログラミングを初めて問題文と入力される情報の手順をきちんと確認しないと間違えることがわかりました。
今回の問題文は非常に簡単で整数a,b,cを全て足し合わせたものを表示させるのと文字列を表示させることをしなくてはなりません。
データのインプット方法は以下の通りで、
1
2 3
test
そしてアウトプットが、
6 test
このような結果でないと正解判定にはなりません。
まずはJavaの基本的なコードを書いていきます。
public class Main {
public static void main(String args[]) {
処理内容を記述
}
}
競技プログラミングでJavaをやる際はclassをMainで書くことがほとんどです。
javaは小文字、大文字は区別されるので注意が必要
基本的なJavaプログラムの骨格なので非常に重要なのですが、競技プログラミングなので今回は割愛して処理内容の方だけ解説します。
データの入力準備をします
データを受け取るためには”Scanner”を使用する必要があります。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.close();
}
}
1、import java.util.Scanner;
は、 Scanner
クラスを使うためには、ScannerをJavaプログラムにインポートします。これにより、Scannerクラスが使用可能になります。
2、Scanner scanner = new Scanner(System.in);
は、Scanner
クラスの新しいインスタンスを作成しています。
このインスタンスは、標準入力(キーボード)からの入力を受け付けるために使用されます。System.in
は標準入力ストリームを表します。
3、scanner.close();
は、Scanner
クラスのインスタンスを閉じてリソースを解放します。
Scannerを使用し終わったら、必ず close()
メソッドを呼び出すことが推奨されます。
以上でデータを受け取る準備ができました。
整数a,b,cについて
ここではa,b,cは整数であり、それを足し算しなくてはなりません。
以下がサンプルコードです。
int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt();int sum = a + b + c;
まずはa,b,cは整数であることを定義する必要があるので”int a;”と記載します。
整数(integer)型のデータを表すJavaのデータ型です。
その後に整数に定義されたa,b,cに入力するデータを入れます。
なので”scanner.nextInt();”を使用して入力から整数を読み取ります。
そしてが入力した整数イコール(=)を使用してを変数 a
に格納しています。
整数に定義されたのであとは全てを足し合わせるだけです。
sum(合計)を使用してそのままa+b+cと記載するだけで合計を変数sumに格納できて非常に簡単です。
文字列を表示させよう!
String(文字列)型の変数を使用していきます。
String s = scanner.next();
sを文字列に定義して、整数データを”scanner.next();”で受け取ります。
※intの場合はnextInt,Stringの場合はnext;だけでいい
データをアウトプットしよう!
以上のコードでa,b,c,s,sumの準備ができたのであとは問題が必要としている結果だけを表示させましょう。
合計と文字列だけを表示させるだけなのでsumとsだけを使います。
System.out.printf("%d %s", sum, s);
System.out.printf(” ”);でデータを表示させることができます。
(” ”)の中にフォーマットの%d
は整数(decimal)、%s
は文字列を表示させるコードを記載して、その枠の外にsum,s を記載することにより%dがsumの値に代わり、%sがsの文字列が表示されます。
他にもprintlnの書き方があります。
System.out.println(sum + " " + s);
printlnの場合は表示されるもののフォーマットを記載しなくても良くて、変数+”文字”+変数+変数…みたいな形でプラスで繋ぎ合わせる形です。
まとめ
今回僕が模範として投稿した回答は上記のものと以下の2パターンあります。
人によって色んな書き方があるのが、競技プログラミングの面白さだと思うので自分が書いたコードと比較するのも1つの学びたと思います。