ABC奮闘記(AtCoder Beginner Contest 282)

プログラミングの勉強がてら最近は待っているAtCoderのプログラミングコンテストの参加記録です。
2022年12月17日(土)のABC282の参戦記録です。

At Beginner Contest(ABC282)

A – Generalized ABC

1~26の数字がインプットで渡ってくるので、その数字に該当するアルファベットを出力する問題。

substringメソッドを使って文字の出力を行うことで1発OKでした。提出前に1番目、26番目が正しく表示されるかの確認は必須ですね。

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();
 
		String moji = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
		System.out.println(moji.substring(0, n));
 
	}
}

B – Let’s Get a Perfect Score

インプットの1行の〇×が1行目さんの問題の成否を表している。

2人でペアを組んで、どちらかが正解ていればよいということなので、すべての行の組み合わせと1問ごとの成否で最後までこたえられるかを確認する配列を組んだら1発でOKとなりました。

インプットの行数と問題の数が少ないので、力業での回答でも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();
		int m = sc.nextInt();
 
		String[] sArray = new String[n];
 
		int answer = 0;
 
		for (int i = 0; i < n; i++) {
			sArray[i] = sc.next();
		}
 
		for (int i = 0; i < n; i++) {
 			for (int j = i + 1; j < n; j++) {
				boolean canClear = true;
				for (int x = 0; x < m; x++) {
					if ("x".equals(sArray[i].substring(x, x + 1)) && "x".equals(sArray[j].substring(x, x + 1))) {
						canClear = false;
					}
				}
				if (canClear)
					answer++;
			}
 
		}
		System.out.println(answer);
	}
}

C – String Delimiter

この問題は入力された文字列を1文字目から順に解析して、”が来たら閉じられているかどうかのフラグをオン/オフすればよいだけなのでそれほど難しくなく1発OKでした。

問題の性質上、”のフラグのオン/オフの制御ができて、サンプルのインプット3つをすべて通せたらほぼ引っかからないと思われです。

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();
		String s = sc.next();
 
		boolean isClose = false;
 
		for (int i = 0; i < n; i++) {
			String input = s.substring(i, i + 1);
 
			if (!isClose) {
				if ("\"".equals(input)) {
					isClose = true;
				} else if (",".equals(input)) {
					input = ".";
				}
			} else {
				if ("\"".equals(input)) {
					isClose = false;
				}
			}
			System.out.print(input);
		}
		System.out.println("");
	}
}

今回は3問目を答えてD問題を解こうとしましたがギブアップでした。

D問題を飛ばしてE問題に行きましたがこれも裏目。全く手が出ずでした。
3問目までで26分だったので、残りの1時間は何も手が出ずで非常に悔しかったです。

今週も挑戦予定です。

コメント

タイトルとURLをコピーしました