No older revisions available
No older revisions available
~cpp
#include <iostream>
#include <algorithm>
using namespace std;
struct Poker {
int number;
char color;
};
Poker black[6];
Poker white[6];
////// 비길경우 비교를 위해
Poker blackPair[5];
Poker whitePair[5];
int i;
char temp[255];
////////////////////////////// 소팅 ////////////////////////////////////
bool compare(Poker a, Poker b)
{
return a.number>b.number;
}
/////////////////////////////// 입 력 //////////////////////////////////
bool input()
{
temp[28]=NULL;
cin.getline(temp, 255);
for(i=0; i<10; i++)
{
if(temp[28]==NULL)
return false;
if(i<5)
{
if(temp[3*i]=='T')
black[i].number = 10;
else if(temp[3*i]=='J')
black[i].number = 11;
else if(temp[3*i]=='Q')
black[i].number = 12;
else if(temp[3*i]=='K')
black[i].number = 13;
else if(temp[3*i]=='A')
black[i].number = 14;
else
black[i].number = temp[3*i]-48;
black[i].color = temp[3*i+1];
}
else
{
if(temp[3*i]=='T')
white[i-5].number = 10;
else if(temp[3*i]=='J')
white[i-5].number = 11;
else if(temp[3*i]=='Q')
white[i-5].number = 12;
else if(temp[3*i]=='K')
white[i-5].number = 13;
else if(temp[3*i]=='A')
white[i-5].number = 14;
else
white[i-5].number = temp[3*i]-48;
white[i-5].color = temp[3*i+1];
}
}
black[5].number = 0; white[5].number = 0;
sort(&black[0], &black[5], compare);
sort(&white[0], &white[5], compare);
return true;
}
///////////////////////////// 풀하우스 결정 ////////////////////////////
bool isFullHouse(Poker *card, int turn)
{
if((card[0].number==card[2].number) && (card[3].number==card[4].number))
{
if(turn==1)
{
blackPair[0].number = card[2].number;
blackPair[1].number = card[3].number;
}
else
{
whitePair[0].number = card[2].number;
whitePair[1].number = card[3].number;
}
return true;
}
else if((card[0].number==card[1].number) && (card[2].number==card[4].number))
{
if(turn==1)
{
blackPair[0].number = card[2].number;
blackPair[1].number = card[1].number;
}
else
{
whitePair[0].number = card[2].number;
whitePair[1].number = card[1].number;
}
return true;
}
return false;
}
///////////////////////////// 포카드 결정 ////////////////////////////
bool isFourCard(Poker *card, int turn)
{
if(card[0].number==card[3].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[0].number;
blackPair[1].number = card[4].number;
}
else
{
whitePair[0].number = card[0].number;
whitePair[1].number = card[4].number;
}
return true;
}
else if(card[1].number==card[4].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[1].number;
blackPair[1].number = card[0].number;
}
else
{
whitePair[0].number = card[1].number;
whitePair[1].number = card[0].number;
}
return true;
}
return false;
}
///////////////////////////// 트리플 결정 ////////////////////////////
bool isThreeCard(Poker *card, int turn)
{
if(card[0].number==card[2].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[0].number;
blackPair[1].number = card[3].number;
blackPair[2].number = card[4].number;
}
else
{
whitePair[0].number = card[0].number;
whitePair[1].number = card[3].number;
whitePair[2].number = card[4].number;
}
return true;
}
else if(card[1].number==card[3].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[1].number;
blackPair[1].number = card[0].number;
blackPair[2].number = card[4].number;
}
else
{
whitePair[0].number = card[1].number;
whitePair[1].number = card[0].number;
whitePair[2].number = card[4].number;
}
return true;
}
else if(card[2].number==card[4].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[2].number;
blackPair[1].number = card[0].number;
blackPair[2].number = card[1].number;
}
else
{
whitePair[0].number = card[2].number;
whitePair[1].number = card[0].number;
whitePair[2].number = card[1].number;
}
return true;
}
return false;
}
///////////////////////////// 투페어 결정 ////////////////////////////
bool isTwoPair(Poker *card, int turn)
{
if((card[0].number==card[1].number)&&(card[2].number==card[3].number))
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[0].number;
blackPair[1].number = card[2].number;
blackPair[2].number = card[4].number;
}
else
{
whitePair[0].number = card[0].number;
whitePair[1].number = card[2].number;
whitePair[2].number = card[4].number;
}
return true;
}
else if((card[0].number==card[1].number)&&(card[3].number==card[4].number))
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[0].number;
blackPair[1].number = card[3].number;
blackPair[2].number = card[2].number;
}
else
{
whitePair[0].number = card[0].number;
whitePair[1].number = card[3].number;
whitePair[2].number = card[2].number;
}
return true;
}
else if((card[1].number==card[2].number)&&(card[3].number==card[4].number))
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[1].number;
blackPair[1].number = card[3].number;
blackPair[2].number = card[0].number;
}
else
{
whitePair[0].number = card[1].number;
whitePair[1].number = card[3].number;
whitePair[2].number = card[0].number;
}
return true;
}
return false;
}
///////////////////////////// 원페어 결정 ////////////////////////////
bool isOnePair(Poker *card, int turn)
{
if(card[0].number==card[1].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[0].number;
blackPair[1].number = card[2].number;
blackPair[2].number = card[3].number;
blackPair[3].number = card[4].number;
}
else
{
whitePair[0].number = card[0].number;
whitePair[1].number = card[2].number;
whitePair[2].number = card[3].number;
whitePair[3].number = card[4].number;
}
return true;
}
else if(card[1].number==card[2].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[1].number;
blackPair[1].number = card[0].number;
blackPair[2].number = card[3].number;
blackPair[3].number = card[4].number;
}
else
{
whitePair[0].number = card[1].number;
whitePair[1].number = card[0].number;
whitePair[2].number = card[3].number;
whitePair[3].number = card[4].number;
}
return true;
}
else if(card[2].number==card[3].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[2].number;
blackPair[1].number = card[0].number;
blackPair[2].number = card[1].number;
blackPair[3].number = card[4].number;
}
else
{
whitePair[0].number = card[2].number;
whitePair[1].number = card[0].number;
whitePair[2].number = card[1].number;
whitePair[3].number = card[4].number;
}
return true;
}
else if(card[3].number==card[4].number)
{
if(turn==1) //블랙 턴일 경우
{
blackPair[0].number = card[3].number;
blackPair[1].number = card[0].number;
blackPair[2].number = card[1].number;
blackPair[3].number = card[2].number;
}
else
{
whitePair[0].number = card[3].number;
whitePair[1].number = card[0].number;
whitePair[2].number = card[1].number;
whitePair[3].number = card[2].number;
}
return true;
}
return false;
}
////////////////////////////////// 플러시 결정 //////////////////////////////////
bool isFlush(Poker *card)
{
for(i=1; i<5; i++)
if(card[i].color!=card[i-1].color)
return false;
return true;
}
///////////////////////////////// 스트레이트 결정 ////////////////////////////////
bool isStreit(Poker *card)
{
for(i=1; i<5; i++)
if(card[i].number != card[i-1].number-1)
return false;
return true;
}
/////////////////////////////// 카드 우선 순위 결정 /////////////////////////////////
int cardpower(Poker *card, int turn)
{
if(isStreit(card) && isFlush(card))
return 1;
else if(isFourCard(card, turn))
return 2;
else if(isFullHouse(card, turn))
return 3;
else if(isFlush(card))
return 4;
else if(isStreit(card))
return 5;
else if(isThreeCard(card, turn))
return 6;
else if(isTwoPair(card, turn))
return 7;
else if(isOnePair(card, turn))
return 8;
else
return 9;
}
/////////////////////////////// 큰수 결정 ///////////////////////////////
int decideBigger(Poker *card1, Poker *card2)
{
for(i=0; i<5; i++)
{
if(card1[i].number>card2[i].number)
return 1;
else if(card1[i].number<card2[i].number)
return -1;
}
return 0;
}
/////////////////////////////////// 승자 결정 ///////////////////////////////////
int decideWinner()
{
if(cardpower(black, 1)<cardpower(white, 2))
return 1;
else if(cardpower(black, 1)>cardpower(white, 2))
return -1;
else
{
if(cardpower(black, 1)==1 || cardpower(black, 1)==4 || cardpower(black, 1)==5 || cardpower(black, 1)==9)
return decideBigger(black, white);
else
return decideBigger(blackPair, whitePair);
}
}
int main()
{
while(input())
{
for(i=0; i<5; i++)
{
blackPair[i].number=0;
whitePair[i].number=0;
}
int result = decideWinner();
if(result==1)
cout <<"Black wins." <<endl;
else if(result==-1)
cout <<"White wins." <<endl;
else
cout <<"Tie."<<endl;
}
return 0;
}