白俊-14696号(絵遊び)
質問元:https://www.acmicpc.net/problem/14696
質問する
二人の子供A,Bは絵を描いている.絵遊びのルールは以下の通りです.二人の子供は最初は何枚もの絵を持っていて、輪ごとに自分の絵を1枚ずつ出しています.絵には星(★)、円(●)、四角(■)、三角形(▲)、4つの形のうちの1つまたは複数の形があります.二人の子供の絵の中でどちらが強いかは、以下のルールに従います.
2つの星の数が違うと、多くの星の1つの星が勝つ.
星の数が同じで、円の数が違うと、円の多い方の絵が勝つ.
星や円の個数が等しく、角の個数が異なると、角の多い方の絵が勝つ.
星、円、四角の個数が等しく、三角形の個数が異なると、三角形の多い方の絵が勝つ.
星、円、四角、三角形の個数が等しい場合、それは引き分けです.
例えば、二人の子供A、Bのカードは下図のようになります.
上のルールでは、Aの絵には星があり、Bの絵には星がないので、勝者はAです.上図が第1ラウンドの場合、第2、3、4、5ラウンドの場合は下表のように、第2、3、4ラウンドの勝者はそれぞれB、B、A、第5ラウンドは引き分けとなり、Dで示す.
星、円、四角形、三角形はそれぞれ数字4、3、2、1で表されます.例えば、第1ラウンドでは、子供Aが出した絵★は4で表現でき、子供Bが出した絵●▲は3 3 3 2 1で表現できる.
ラウンド数Nと2人の子供が順番にカードを出すカードの情報を得た場合は、ラウンドごとにカードゲームの結果を求めるプログラムを作成してください.
優先順位により、各形状の個数を比較するだけでよい. で入力された数字をインデックスとし、数の配列を維持するように、それらの値を1つずつ比較することによって実現される. などのインデックスを持つ2つの配列の値が異なる場合、より多くの人が勝ったとみなされます.
質問する
二人の子供A,Bは絵を描いている.絵遊びのルールは以下の通りです.二人の子供は最初は何枚もの絵を持っていて、輪ごとに自分の絵を1枚ずつ出しています.絵には星(★)、円(●)、四角(■)、三角形(▲)、4つの形のうちの1つまたは複数の形があります.二人の子供の絵の中でどちらが強いかは、以下のルールに従います.
2つの星の数が違うと、多くの星の1つの星が勝つ.
星の数が同じで、円の数が違うと、円の多い方の絵が勝つ.
星や円の個数が等しく、角の個数が異なると、角の多い方の絵が勝つ.
星、円、四角の個数が等しく、三角形の個数が異なると、三角形の多い方の絵が勝つ.
星、円、四角、三角形の個数が等しい場合、それは引き分けです.
例えば、二人の子供A、Bのカードは下図のようになります.
上のルールでは、Aの絵には星があり、Bの絵には星がないので、勝者はAです.上図が第1ラウンドの場合、第2、3、4、5ラウンドの場合は下表のように、第2、3、4ラウンドの勝者はそれぞれB、B、A、第5ラウンドは引き分けとなり、Dで示す.
星、円、四角形、三角形はそれぞれ数字4、3、2、1で表されます.例えば、第1ラウンドでは、子供Aが出した絵★は4で表現でき、子供Bが出した絵●▲は3 3 3 2 1で表現できる.
ラウンド数Nと2人の子供が順番にカードを出すカードの情報を得た場合は、ラウンドごとにカードゲームの結果を求めるプログラムを作成してください.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int ROUND = Integer.parseInt(reader.readLine());
for (int i = 0; i < ROUND; i++) {
int[] cardA = new int[4]; // A의 카드 그림
int[] cardB = new int[4]; // B의 카드 그림
StringTokenizer tokenizer = new StringTokenizer(reader.readLine()); // 각 라운드별 A의 선택
int numA = Integer.parseInt(tokenizer.nextToken());
for (int j = 0; j < numA; j++) {
cardA[Integer.parseInt(tokenizer.nextToken()) - 1]++;
}
tokenizer = new StringTokenizer(reader.readLine()); // 각 라운드별 B의 선택
int numB = Integer.parseInt(tokenizer.nextToken());
for (int j = 0; j < numB; j++) {
cardB[Integer.parseInt(tokenizer.nextToken()) - 1]++;
}
boolean flag = false;
for (int j = 3; j >= 0; j--) {
if (cardA[j] - cardB[j] != 0) { // 별의 갯수가 다름
sb.append(cardA[j] > cardB[j] ? "A" : "B");
flag = true;
break;
}
}
if (!flag) sb.append("D");
sb.append("\n");
}
System.out.println(sb);
}
}
Reference
この問題について(白俊-14696号(絵遊び)), 我々は、より多くの情報をここで見つけました https://velog.io/@ghc1124/백준-14696번딱지놀이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol