寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

paizaラーニング: Javaによる「Bランクレベルアップメニュー」問題集: 占い

paizaラーニングのレベルアップ問題集「Bランクレベルアップセット」からの出典です。
paiza.jp
「占い」問題集と、それらの提出コードの解答例です。

僕が作成、提出したコードは、以下のとおりです。

・STEP: 1 連想配列(辞書)を使う
 「ユーザー」と「ユーザーに対応する血液型」を連想配列(辞書)として定義して、それらのキーと値のペアを順に出力してください。

/*
Javaによる「占い」問題集
STEP: 1 連想配列(辞書)を使う
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, String> hm = new LinkedHashMap<>();
        hm.put("Kyoko", "B");
        hm.put("Rio", "O");
        hm.put("Tsubame", "AB");
        hm.put("KurodaSensei", "A");
        hm.put("NekoSensei", "A");
        for(Map.Entry<String, String> entry : hm.entrySet()){
			System.out.println(entry.getKey() + " " + entry.getValue());
		}
    }
}

・STEP: 2 ユーザーの血液型のデータ処理
 n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
 そのあとで連想配列(辞書)をそのまま表示してください。

/*
Javaによる「占い」問題集
STEP: 2 ユーザーの血液型のデータ処理
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, String> hm = new LinkedHashMap<>();
        Scanner sc = new Scanner(System.in);
        String N = sc.nextLine();
        int n = Integer.parseInt(N);
        for(int i = 0; i < n; i++) {
        	String foo = sc.next();
        	String bar = sc.next();
        	hm.put(foo,bar);
        }
        for(Map.Entry<String, String> entry : hm.entrySet()){
			System.out.println(entry.getKey() + " " + entry.getValue());
		}
    }
}

・STEP: 3 1人の血液型
 1行目でユーザーが1つ与えられます。
 n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
 その連想配列(辞書)の中で1行目で与えられたユーザー名と、ユーザー名に対応する血液型を表示してください。

/*
Javaによる「占い」問題集
STEP: 3 1人の血液型
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, String> hm = new LinkedHashMap<>();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String N = sc.nextLine();
        int n = Integer.parseInt(N);
        for(int i = 0; i < n; i++) {
        	String foo = sc.next();
        	String bar = sc.next();
        	hm.put(foo,bar);
        }
		System.out.println(str + " " + hm.get(str));
    }
}

・STEP: 4 1つの血液型を占う
 1行目で血液型が1つ与えられます。
 m 行の血液型と占い結果の組が与えられるので、血液型をキー、占い結果を値として、連想配列(辞書)に保存してください。
 その後、1行目で与えられた血液型に対応する占い結果を表示してください。

/*
Javaによる「占い」問題集
STEP: 4 1つの血液型を占う
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, String> hm = new LinkedHashMap<>();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        while(sc.hasNext()) {
        	String foo = sc.next();
        	String bar = sc.next();
        	hm.put(foo,bar);
        }
		System.out.println(hm.get(str));
    }
}

・STEP: 5 1人の占い結果
 最初に「ユーザー」 U が1つ与えられます。
 続いて n 人の「ユーザー」と「ユーザーに対応する血液型」が与えられます。
 続いて m 種類の「血液型」と「血液型に対応する占い結果」が与えられます。
 与えられたユーザー U に対応する占い結果を表示してください。
 入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
 入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
 「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。

/*
Javaによる「占い」問題集
STEP: 5 1人の占い結果
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, String> hm1 = new LinkedHashMap<>();
        LinkedHashMap<String, String> hm2 = new LinkedHashMap<>();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String N = sc.nextLine();
        int n = Integer.parseInt(N);
        for(int i = 0; i < n; i++) {
        	String[] foo = sc.nextLine().split(" ");
        	hm1.put(foo[0],foo[1]);
        }
        String M = sc.nextLine();
        int m = Integer.parseInt(M);
        for(int i = 0; i < m; i++) {
        	String[] bar = sc.nextLine().split(" ");
        	hm2.put(bar[0],bar[1]);
        }               
		System.out.println(hm2.get(hm1.get(str)));
    }
}

・FINAL問題: 占い
 「ユーザー」と「ユーザーに対応する血液型」、「血液型」と「血液型に対応する占い結果」が与えられます。
 それぞれのユーザーに対応する占い結果を表示してください。
 入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
 入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
 「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。

/*
Javaによる「占い」問題集
FINAL問題: 占い
https://paiza.jp/works/mondai
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, String> hm1 = new LinkedHashMap<>();
        LinkedHashMap<String, String> hm2 = new LinkedHashMap<>();
        Scanner sc = new Scanner(System.in);
        String N = sc.nextLine();
        int n = Integer.parseInt(N);
        for(int i = 0; i < n; i++) {
        	String[] foo = sc.nextLine().split(" ");
        	hm1.put(foo[0],foo[1]);
        }
        String M = sc.nextLine();
        int m = Integer.parseInt(M);
        for(int i = 0; i < m; i++) {
        	String[] bar = sc.nextLine().split(" ");
        	hm2.put(bar[0],bar[1]);
        }
        for(String key1 : hm1.keySet()) {
        	System.out.println(key1 + " " + hm2.get(hm1.get(key1)));
        }
    }
}

HashMap とか LinkedList ではなくて、LinkedHashMap クラスを使うことで挿入した順番を保持できます。

paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。