taiPyのお悩み解決ブログ

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

学習記録:Java:B - Commencement , AtCoder Beginner Contest 349

問題と公式の解答へのリンク

問題 B - Commencement https://atcoder.jp/contests/abc349/tasks/abc349_b

公式の解答へのリンク https://atcoder.jp/contests/abc349/editorial/9778

解答例 自分の

Javaの解答例(自作)

Point

  • 文字が何文字出てきてますかー
  • 1回の繰り返しの文字の種類は、、2回の繰り返しの文字の種類は、、って100回の繰り返しの文字の種類は?ってforループさせます。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

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

        Map<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < sLength; i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }


        for (int i = 1; i <= 101; i++) {
            int count = 0;
            for (Integer num : map.values()) {
                if (num == i) {
                    count ++;
                }
            }

            if (! (count == 0 || count == 2)) {
                System.out.println("No");
                return;
            }
            
        }

        System.out.println("Yes");

        sc.close();
    }
}

公式の解答(Python)をJavaに変換

公式の解答(Python)をJavaに変換

Point

  • アルファベットは26文字
  • char型の'a'は97、'b'は98というように、char型のアルファベットの持つ数値は連続している。

アルファベットを出力するコード

        char c = 'a';
        for (int i = 0; i < 26; i++) {
            System.out.println(c++);
        }

解答例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String S = scanner.nextLine();
        int[] cnt = new int[26];
// 文字が出てきたら数えている
// 配列のindex=0が1文字目、つまりaを意味している。
        for (char c : S.toCharArray()) {
            cnt[c - 'a']++;
        }

// 1文字連続、2文字連続・・・100文字連続が何種類あるかを数える
        int[] cnt2 = new int[101];
        for (int c : cnt) {
            if (c > 0) {
                cnt2[c]++;
            }
        }

// 判定
        boolean isAllZeroOrTwo = true;
        for (int c : cnt2) {
            if (c != 0 && c != 2) {
                isAllZeroOrTwo = false;
                break;
            }
        }
        System.out.println(isAllZeroOrTwo ? "Yes" : "No");
    }
}