結果
| 問題 |
No.227 簡単ポーカー
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-05-30 18:13:48 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 62 ms / 5,000 ms |
| コード長 | 4,451 bytes |
| コンパイル時間 | 3,914 ms |
| コンパイル使用メモリ | 82,708 KB |
| 実行使用メモリ | 50,488 KB |
| 最終ジャッジ日時 | 2024-09-21 19:22:52 |
| 合計ジャッジ時間 | 5,451 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 14 |
ソースコード
package test_5;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
* No.227 簡単ポーカー
* 5枚のカードが配られます。それぞれのカードには、1以上13以下のいずれかの整数が書かれています。カードに書かれている整数の組み合わせによって役が決まります。
*
* 配られた5枚のカードが、以下のいずれの役に該当するかを調べてください。複数の役に該当する場合は、以下で先に記述した方の役に該当するものとします。
*
* FULL HOUSE
* ある数をちょうど3つと、別の数をちょうど2つ含む。
* THREE CARD
* ある数をちょうど3つ含む。
* TWO PAIR
* ある数をちょうど2つと、別の数をちょうど2つ含む。
* ONE PAIR
* ある数をちょうど2つ含む。
*/
public class Question_07_0526_1 {
static final int CARD_COUNT = 5;
static final int NUM_MIN = 1;
static final int NUM_MAX = 13;
// カードの数字と枚数のマップ
static Map<Integer, Integer> numCountMap = new HashMap<Integer, Integer>();
// 役名マップ
static HashMap<String, String> roleMap = new HashMap<String, String>();
public static void main(String[] args) {
//キーの意味 2桁目:TreePairの枚数 1桁目:Pairの枚数
roleMap.put("11", "FULL HOUSE"); // ある数をちょうど3つと、別の数をちょうど2つ含む。
roleMap.put("10", "THREE CARD"); // ある数をちょうど3つ含む。
roleMap.put("02", "TWO PAIR"); // ある数をちょうど2つと、別の数をちょうど2つ含む。
roleMap.put("01", "ONE PAIR"); // ある数をちょうど2つ含む。
roleMap.put("00", "NO HAND"); // なし
InputStreamReader re = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(re);
try {
String[] inpoutCard = br.readLine().split(" ");
boolean errorFlg = false;
if (inpoutCard.length == CARD_COUNT) {
// カードの数字を入れる
int[] CardList = new int[inpoutCard.length];
for (int i = 0; i < inpoutCard.length; i++) {
int cardNum = Integer.parseInt(inpoutCard[i]);
if (NumJudg(cardNum, NUM_MIN, NUM_MAX)) {
CardList[i] = Integer.parseInt(inpoutCard[i]);
} else {
System.out.println("カードの数字が範囲外です");
errorFlg = true;
break;
}
}
int Pair = 0;
int treePair = 0;
// エラーが無ければ処理をする
if (!errorFlg) {
// numCountMapに入れる
pairCheck(CardList);
// cardNum = カードの数字, numCountMap.get(cardNum) = 枚数
for (int cardNum : numCountMap.keySet()) {
// System.out.println(cardNum + "=>" + numCountMap.get(cardNum));
if (numCountMap.get(cardNum) == 2) {
Pair++;
}
if (numCountMap.get(cardNum) == 3) {
treePair++;
}
}
//roleMap用キー作成
String roleMapKey = String.valueOf(treePair) + String.valueOf(Pair);
// 役名出力
// System.out.println(roleMapKey);
System.out.println(roleMap.get(roleMapKey));
}
} else {
System.out.println("カードの枚数は5枚入力して下さい");
}
} catch (NumberFormatException e) {
System.out.println("数字を入力して下さい。");
} catch (IOException e) {
System.out.println("エラーが発生しました。");
} finally {
try {
re.close();
br.close();
} catch (IOException e) {
System.out.println("InputStreamReader、BufferedReaderクローズ中にエラーが発生しました");
}
}
}
/**
* 有効値判定
* @param num 判定する数字
* @param max 最大値
* @param min 最小値
* @return 範囲内ならtrue,範囲外ならfalseを返す
*/
private static boolean NumJudg(int num, int min, int max) {
Boolean result = false;
if (min <= num && num <= max) {
result = true;
}
return result;
}
/**
* カードの種類と枚数をnumCountMapに入れる
* @param cardList
*/
private static void pairCheck(int[] cardList) {
//何枚あるか
int count;
// マップに入れる
for (int card : cardList) {
if (numCountMap.containsKey(card)) {
// Mapに登録済み
count = numCountMap.get(card) + 1;
} else {
// Mapに未登録
count = 1;
}
numCountMap.put(card, count);
}
}
}