{"id":2241,"date":"2009-10-11T17:01:22","date_gmt":"2009-10-11T17:01:22","guid":{"rendered":"http:\/\/192.168.0.71:9090\/?p=1943"},"modified":"2009-10-11T17:01:22","modified_gmt":"2009-10-11T17:01:22","slug":"programming-challenges-%ed%8f%ac%ec%bb%a4-%ed%8c%a8-poker-hands","status":"publish","type":"post","link":"https:\/\/talsu.net\/?p=2241","title":{"rendered":"Programming Challenges &#8211; \ud3ec\ucee4 \ud328 (Poker Hands)"},"content":{"rendered":"<p><span style=\"font-size: 12pt; font-weight: bold;\"><a title=\"[http:\/\/programming-challenges.com\/pg.php?page=downloadproblem&amp;probid=110202&amp;format=html]\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\" target=\"_blank\" href=\"http:\/\/programming-challenges.com\/pg.php?page=downloadproblem&amp;probid=110202&amp;format=html\">\ubb38\uc81c &lt;- \ud074\ub9ad<\/a><\/span><\/p>\n<p>\ubcc4\ub85c \uc5b4\ub835\uc9c4 \uc54a\uc740\ub370 \uc2dc\uac04\uc774 \ub9ce\uc774 \uac78\ub9ac\ub294 \uc608\uc81c \uc600\ub2e4. \uc785\ucd9c\ub825\uc774 \uae4c\ub2f5\ub86d\uc9c0 \uc54a\uc544\uc11c \uc778\uc9c0 \uae08\ubc29 \uc131\uacf5 \ud558\uae34 \ud588\uc9c0\ub9cc \uc2dc\uac04 \ub0a0\ub54c \uc880\ub354 \ub2e4\ub4ec\uace0 \uc2f6\ub2e4.<\/p>\n<pre class=\"lang:c++ decode:true\">\n#include <iostream>\n#include <string>\n#include <sstream>\n#include <vector>\n#include <cmath>\n#include <algorithm>\n\nstruct _Card {\n\tint pattern;\n\tint value;\n\tbool operator==(const _Card& rhs) {\n\t\treturn (*this).value == rhs.value;\n\t}\n};\n\ntypedef struct _Card Card;\ntypedef std::vector<card> CardSet;\n\nclass CompareValue {\npublic:\n\tbool operator()(const Card& lhs, const Card& rhs) {\n\t\treturn lhs.value > rhs.value;\n\t}\n};\n\nclass PokerCardSet {\nprivate:\n\tenum {\n\t\tCLUB,\n\t\tDIAMOND,\n\t\tHEART,\n\t\tSPADE,\n\t\tTEN = 10,\n\t\tJACK = 11,\n\t\tQUEEN = 12,\n\t\tKING = 13,\n\t\tACE = 14\n\t};\n\tenum {\n\t\tBLACK, WHITE\n\t};\n\n\tCardSet cardSet;\n\tint score;\n\n\tvoid setCard(char value, char pattern) {\n\t\tCard card;\n\t\tswitch (pattern) {\n\t\tcase 'C':\n\t\t\tcard.pattern = CLUB;\n\t\t\tbreak;\n\t\tcase 'D':\n\t\t\tcard.pattern = DIAMOND;\n\t\t\tbreak;\n\t\tcase 'H':\n\t\t\tcard.pattern = HEART;\n\t\t\tbreak;\n\t\tcase 'S':\n\t\t\tcard.pattern = SPADE;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tcard.pattern = pattern - '0';\n\t\t\tbreak;\n\t\t}\n\n\t\tswitch (value) {\n\t\tcase 'T':\n\t\t\tcard.value = TEN;\n\t\t\tbreak;\n\t\tcase 'J':\n\t\t\tcard.value = JACK;\n\t\t\tbreak;\n\t\tcase 'Q':\n\t\t\tcard.value = QUEEN;\n\t\t\tbreak;\n\t\tcase 'K':\n\t\t\tcard.value = KING;\n\t\t\tbreak;\n\t\tcase 'A':\n\t\t\tcard.value = ACE;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tcard.value = value - '0';\n\t\t\tbreak;\n\t\t}\n\t\tcardSet.push_back(card);\n\t}\n\n\tint highCard() {\n\t\treturn score = highCard(cardSet);\n\t}\n\n\tint highCard(CardSet& cardSet) {\n\t\tstd::sort(cardSet.begin(), cardSet.end(), CompareValue());\n\t\tint sumCardValue = 0;\n\t\tint digit = 0;\n\t\tfor (CardSet::reverse_iterator it = cardSet.rbegin(); it\n\t\t\t\t!= cardSet.rend(); ++it) {\n\t\t\tsumCardValue += (*it).value * std::pow((double) 15,\n\t\t\t\t\t(double) digit++);\n\t\t}\n\t\treturn sumCardValue;\n\t}\n\n\tint onePair() {\n\t\tint compareCounter = 0;\n\t\tCard currentCard;\n\t\tint pairCounter = 0;\n\t\tCardSet diffrentSet;\n\t\tCardSet sameSet;\n\t\tCardSet returnCardSet;\n\t\tstd::sort(cardSet.begin(), cardSet.end(), CompareValue());\n\n\t\tfor (CardSet::iterator it1 = cardSet.begin(); it1 != cardSet.end(); ++it1) {\n\t\t\tcompareCounter = 0;\n\t\t\tcurrentCard = *it1;\n\t\t\tfor (CardSet::iterator it2 = cardSet.begin(); it2 != cardSet.end(); ++it2) {\n\t\t\t\tif (*it1 == *it2)\n\t\t\t\t\t++compareCounter;\n\t\t\t}\n\n\t\t\tif (compareCounter == 2) {\n\t\t\t\tsameSet.push_back(currentCard);\n\t\t\t\tpairCounter++;\n\t\t\t} else if (compareCounter == 1) {\n\t\t\t\tdiffrentSet.push_back(currentCard);\n\t\t\t}\n\t\t}\n\t\tdiffrentSet.insert(diffrentSet.begin(), sameSet.begin(), sameSet.end());\n\n\t\tif (pairCounter == 2)\n\t\t\treturn score = 2000000 + highCard(diffrentSet);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tint twoPair() {\n\t\tint compareCounter = 0;\n\t\tCard currentCard;\n\t\tint pairCounter = 0;\n\t\tCardSet returnCardSet;\n\t\tstd::sort(cardSet.begin(), cardSet.end(), CompareValue());\n\t\tCard diffrentCard;\n\n\t\tfor (CardSet::iterator it1 = cardSet.begin(); it1 != cardSet.end(); ++it1) {\n\t\t\tcompareCounter = 0;\n\t\t\tfor (CardSet::iterator it2 = cardSet.begin(); it2 != cardSet.end(); ++it2) {\n\t\t\t\tif (*it1 == *it2) {\n\t\t\t\t\t++compareCounter;\n\t\t\t\t\tcurrentCard = *it1;\n\t\t\t\t} else {\n\t\t\t\t\tdiffrentCard = *it1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (compareCounter == 2) {\n\t\t\t\treturnCardSet.push_back(currentCard);\n\t\t\t\tpairCounter++;\n\t\t\t}\n\t\t}\n\t\treturnCardSet.push_back(diffrentCard);\n\n\t\tif (pairCounter == 4)\n\t\t\treturn score = 3000000 + highCard(returnCardSet);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tint threeOfAKind() {\n\t\tint compareCounter = 0;\n\t\tint currentCard = 0;\n\t\tfor (CardSet::iterator it1 = cardSet.begin(); it1 != cardSet.end(); ++it1) {\n\t\t\tcompareCounter = 0;\n\t\t\tcurrentCard = (*it1).value;\n\t\t\tfor (CardSet::iterator it2 = cardSet.begin(); it2 != cardSet.end(); ++it2) {\n\t\t\t\tif (*it1 == *it2)\n\t\t\t\t\t++compareCounter;\n\t\t\t}\n\t\t\tif (compareCounter == 3) {\n\t\t\t\treturn score = 4000000 + currentCard;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\n\tint straight() {\n\t\tstd::sort(cardSet.begin(), cardSet.end(), CompareValue());\n\t\tCardSet::iterator it;\n\t\tit = cardSet.begin();\n\t\tint value = (*it++).value;\n\t\tint bigCard = value;\n\t\tfor (; it != cardSet.end(); ++it) {\n\t\t\tif (--value != (*it).value)\n\t\t\t\treturn 0;\n\t\t}\n\t\treturn score = 5000000 + bigCard;\n\t}\n\n\tint flush() {\n\t\tCardSet::iterator it;\n\t\tit = cardSet.begin();\n\t\tint pattern = (*it++).pattern;\n\t\tfor (; it != cardSet.end(); ++it) {\n\t\t\tif (pattern != (*it).pattern)\n\t\t\t\treturn 0;\n\t\t}\n\t\treturn score = 6000000 + highCard(cardSet);\n\t}\n\n\tint fullHouse() {\n\t\tint threeCard = 0;\n\t\tint twoCard = 0;\n\t\tint compareCounter = 0;\n\t\tint currentCard = 0;\n\t\tfor (CardSet::iterator it1 = cardSet.begin(); it1 != cardSet.end(); ++it1) {\n\t\t\tcompareCounter = 0;\n\t\t\tcurrentCard = (*it1).value;\n\t\t\tfor (CardSet::iterator it2 = cardSet.begin(); it2 != cardSet.end(); ++it2) {\n\t\t\t\tif (*it1 == *it2) {\n\t\t\t\t\t++compareCounter;\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (compareCounter == 3) {\n\t\t\t\tthreeCard = currentCard;\n\t\t\t}\n\t\t\tif (compareCounter == 2) {\n\t\t\t\ttwoCard = currentCard;\n\t\t\t}\n\t\t}\n\n\t\tif (threeCard && twoCard)\n\t\t\treturn score = 7000000 + threeCard;\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tint fourOfAKind() {\n\n\t\tfor (CardSet::iterator it1 = cardSet.begin(); it1 != cardSet.end(); ++it1) {\n\t\t\tint compareCounter = 0;\n\t\t\tint returnCard = (*it1).value;\n\t\t\tfor (CardSet::iterator it2 = cardSet.begin(); it2 != cardSet.end(); ++it2) {\n\t\t\t\tif (*it1 == *it2)\n\t\t\t\t\t++compareCounter;\n\t\t\t}\n\t\t\tif (compareCounter == 4)\n\t\t\t\treturn score = 8000000 + returnCard;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tint straightFlush() {\n\t\tCardSet::iterator it;\n\t\tit = cardSet.begin();\n\t\tint pattern = (*it).pattern;\n\t\tfor (; it != cardSet.end(); ++it) {\n\t\t\tif (pattern != (*it).pattern)\n\t\t\t\treturn 0;\n\t\t}\n\n\t\tstd::sort(cardSet.begin(), cardSet.end(), CompareValue());\n\n\t\tit = cardSet.begin();\n\t\tint value = (*it).value;\n\t\tint bigCard = value;\n\t\t++it;\n\t\tfor (; it != cardSet.end(); ++it) {\n\t\t\tif (--value != (*it).value)\n\t\t\t\treturn 0;\n\t\t}\n\n\t\treturn score = 9000000 + bigCard;\n\t}\n\n\tvoid getScore() {\n\n\t\tif (straightFlush())\n\t\t\treturn;\n\t\telse if (fourOfAKind())\n\t\t\treturn;\n\t\telse if (fullHouse())\n\t\t\treturn;\n\t\telse if (flush())\n\t\t\treturn;\n\t\telse if (straight())\n\t\t\treturn;\n\t\telse if (threeOfAKind())\n\t\t\treturn;\n\t\telse if (twoPair())\n\t\t\treturn;\n\t\telse if (onePair())\n\t\t\treturn;\n\t\telse if (highCard())\n\t\t\treturn;\n\t\telse\n\t\t\treturn;\n\n\t}\npublic:\n\tPokerCardSet() :\n\t\tscore(0) {\n\t}\n\n\tPokerCardSet(std::string str) {\n\t\tsetCards(str);\n\t}\n\n\tvoid setCards(std::string str) {\n\t\tstd::stringstream ss(str);\n\t\tstd::string strCard;\n\t\tfor (int i = 0; i < 5; ++i) {\n\t\t\tss >> strCard;\n\t\t\tsetCard(strCard[0], strCard[1]);\n\t\t}\n\t\tgetScore();\n\t}\n\n\tbool operator>(const PokerCardSet& rhs) {\n\t\treturn (*this).score > rhs.score;\n\t}\n\n\tbool operator<(const PokerCardSet&#038; rhs) {\n\t\treturn (*this).score < rhs.score;\n\t}\n\n\tbool operator==(const PokerCardSet&#038; rhs) {\n\t\treturn (*this).score == rhs.score;\n\t}\n\n};\n\nclass Poker {\n\tPokerCardSet blackSet;\n\tPokerCardSet whiteSet;\npublic:\n\tPoker(std::string str) {\n\t\tblackSet.setCards(str.substr(0, 14));\n\t\twhiteSet.setCards(str.substr(15, str.length()));\n\t}\n\n\tvoid play() {\n\t\tif (blackSet > whiteSet)\n\t\t\tstd::cout << \"Black wins.\" << std::endl;\n\t\telse if (whiteSet > blackSet)\n\t\t\tstd::cout << \"White wins.\" << std::endl;\n\t\telse if (blackSet == whiteSet)\n\t\t\tstd::cout << \"Tie.\" << std::endl;\n\t}\n\n};\n\nint main() {\n\tstd::string buffer;\n\n\twhile (true) {\n\t\tstd::getline(std::cin, buffer);\n\t\tif (buffer.empty())\n\t\t\tbreak;\n\t\tPoker poker(buffer);\n\t\tpoker.play();\n\t}\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ubb38\uc81c &lt;- \ud074\ub9ad \ubcc4\ub85c \uc5b4\ub835\uc9c4 \uc54a\uc740\ub370 \uc2dc\uac04\uc774 \ub9ce\uc774 \uac78\ub9ac\ub294 \uc608\uc81c \uc600\ub2e4. \uc785\ucd9c\ub825\uc774 \uae4c\ub2f5\ub86d\uc9c0 \uc54a\uc544\uc11c \uc778\uc9c0 \uae08\ubc29 \uc131\uacf5 \ud558\uae34 \ud588\uc9c0\ub9cc \uc2dc\uac04 \ub0a0\ub54c \uc880\ub354 \ub2e4\ub4ec\uace0 \uc2f6\ub2e4. #include #include #include #include #include #include struct _Card { int pattern; int value; bool operator==(const _Card&#038; rhs) { return (*this).value == rhs.value; } }; typedef struct _Card Card; typedef std::vector CardSet; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[9],"tags":[49,189,203,236,385,462],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pXV5a-A9","_links":{"self":[{"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/posts\/2241"}],"collection":[{"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2241"}],"version-history":[{"count":0,"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/posts\/2241\/revisions"}],"wp:attachment":[{"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}