練習と備忘録を兼ねてAtCoder参加した感触を記載します。
####環境
・Mac OS X 10.13.6
・Eclipse
・使用言語:Java8 (OpenJDK 1.8.0)
#きっかけ
職業訓練校でJavaを習い初めて1か月。
やっとfor文を使えるようになってきたレベルでAOJを勧められました。
1週間ほどAOJの問題をルンルンで楽しく解いていましたが昨日、、、朝からアクセスできない(泣)
でもせっかく休みだし何か問題解きたい!
そこで「コンテストってなんだか怖い」と敬遠していたAtCoderのページに行ってみる事にしました。
#AtCoder Beginner Contest 140
ちょうど今日(9/7)開催されるじゃないですかー!!参加ボタンを勢いで押しました。
参加したのは以下のコンテスト
AtCoder Beginner Contest 140
#結果
※ぜんぜん怖くなかった!むしろ終わった後の解説見たりとか楽しい!
#B問題でハマった
B問題、正解はしたものの終わった時点で70分、、、
C問題は見当がつけられませんでした。
####■B問題でハマった原因
・if文の中に二重括弧(())でコンパイルエラー(Eclipseではエラーが出ない)
・for文で回しながら要素を代入していったら配列の索字の数をオーバーする(ArrayIndexOutOfBoundsExceptionエラー)
####■B問題の問題と答え
#####問題 問題B : Buffet
#####正解した解答
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] A = new int[21];
int[] B = new int[21];
int[] C = new int[21];
int i = 0;
int cs = 0;
int csSum = 0;
for( i = 0; i < N ; i++) { //入力2行目の入力をA配列に格納
A[i] = sc.nextInt();
}
for( i = 0; i < N; i++) { //入力3行目の入力をB配列に格納
B[i] = sc.nextInt();
}
for( i = 0; i < N-1; i++) { //入力4行目の入力をC配列に格納
C[i] = sc.nextInt();
}
for(i = 1; i <= N; i++) { //料理を食べた回数だけ繰り返す
int j = A[i-1]; //索字の中に配列を入れたくなかったので苦肉の策で代入
if(A[i] == j+1) { //もし現在食べてる料理の前の料理がi+1番目なら
cs = B[j-1] + C[j-1]; //Bの満足度+Cの満足度
}else { //もしi+1番目ではなかったら
cs = B[j-1];
}
csSum += cs; //得られた満足度の合計に加算していく
}
System.out.println(csSum);
sc.close();
}
}
#まとめ
- すべての提出 を見て、解けた問題も他の方の解答方法を見て勉強します。
- 今まで解いてきた問題数が少なかったと改めて実感、もっともっと練習問題やります。
- そろそろアルゴリズムの勉強します。(バブルソートしか知らない)
#以下記事参考にさせていただきました!
AtCoder コンテストについての tips(@drkenさん)
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~(@drkenさん)
Qiita記事作成方法 初心者の備忘録(@U-MAさん)