結果
問題 | No.227 簡単ポーカー |
ユーザー | nihi9119 |
提出日時 | 2017-05-29 17:44:09 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 56 ms / 5,000 ms |
コード長 | 4,354 bytes |
コンパイル時間 | 5,597 ms |
コンパイル使用メモリ | 81,928 KB |
実行使用メモリ | 37,492 KB |
最終ジャッジ日時 | 2024-09-21 18:10:02 |
合計ジャッジ時間 | 4,817 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 53 ms
37,192 KB |
testcase_01 | AC | 56 ms
37,128 KB |
testcase_02 | AC | 53 ms
37,240 KB |
testcase_03 | AC | 54 ms
37,132 KB |
testcase_04 | AC | 53 ms
37,352 KB |
testcase_05 | AC | 52 ms
37,364 KB |
testcase_06 | AC | 53 ms
36,712 KB |
testcase_07 | AC | 54 ms
37,300 KB |
testcase_08 | AC | 53 ms
37,196 KB |
testcase_09 | AC | 55 ms
37,344 KB |
testcase_10 | AC | 53 ms
36,924 KB |
testcase_11 | AC | 53 ms
36,956 KB |
testcase_12 | AC | 53 ms
37,492 KB |
testcase_13 | AC | 54 ms
37,064 KB |
ソースコード
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) { 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 twoPair = 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) { twoPair++; } if (numCountMap.get(cardNum) == 3) { treePair++; } } String roleMapKey = String.valueOf(treePair) + String.valueOf(twoPair); // 役名出力 // 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); } } }