プログラミングの勉強がてら最近は待っているAtCoderのプログラミングコンテストの参加記録です。
2022年12月10日(土)のABC281の参戦記録です。
At Beginner Contest(ABC281)
A – Count Down
単純に数字をカウントダウンするだけだったのですぐに。
初期値と終了の「0」が出力されることが確認できたタイミングで提出しました。1発OK。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Main main = new Main();
main.exec(sc);
}
public void exec(Scanner sc) {
int n = sc.nextInt();
for (int i = n; 0 <= i; i--) {
System.out.println(i);
}
}
}
B – Sandwich Number
最初と最後がアルファベット、間が6桁の数字でかつ100,000以上999,999以下。
正規表現でできると思いましたが、^とか$とかが抜けて結局都合6回のNG。何とか回答できてよかったです。
import java.util.Scanner;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Main main = new Main();
main.exec(sc);
}
public void exec(Scanner sc) {
String input = sc.next();
String answer = "Yes";
Pattern pattern = Pattern.compile("^[A-Z]{1}[0-9]{6}[A-Z]{1}$");
if (pattern.matcher(input).find()) {
Integer number = Integer.valueOf(input.substring(1, input.length() - 1));
if (number < 100000 || 999999 < number) {
answer = "No";
}
} else {
answer = "No";
}
System.out.println(answer);
}
}
C – Circular Playlist
プレイリストの中の何曲目を再生中かを出力するプログラム。
曲ごとの再生時間を配列に突っ込むのではなく、配列のインデックスの曲が終わった時の総再生時間を配列に突っ込むようにすれば簡単に求まるかなとの推測のもとコードを書いたらすぐに解けました。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Main main = new Main();
main.exec(sc);
}
public void exec(Scanner sc) {
int n = sc.nextInt();
long t = sc.nextLong();
long total = 0l;
long[] array = new long[n + 1];
long answerN = 0;
long answerT = 0;
array[0] = 0;
for (int i = 1; i < n + 1; i++) {
int a = sc.nextInt();
array[i] = array[i - 1] + a;
total += a;
}
t = t % total;
for (int i = 1; i < n + 1; i++) {
if (t < array[i]) {
answerN = i;
answerT = t - array[i - 1];
System.out.println(answerN + " " + answerT);
break;
}
}
}
}
今回は3問目を答えてD問題を解こうとしましたがギブアップでした。
前2回に挑戦したときはD問題を解けていたので今回もって意気込んでいましたそうは甘くなかったです。
今週も挑戦予定です。
コメント