포커 패(Poker Hands)

Programming/Algorithm 2010. 9. 1. 21:19


포커용 카드는 52개의 카드로 이루어진다. 각 카는 클럽, 다이아몬드, 하트, 스페이드 ( 입력데이터에서는 C,D,H,S 로 표기 ) 의 값을 갖는다. 점수를 매길 때 위에 열거한 순서대로 등급이 매겨지며 2가 가장 낮고 에이스가 가장 높다. 무늬는 값에 영향을 끼치지 않는다.

포커 패는 다섯 장의 카드로 구성되며 다음과 같은 순서대로 등급이 매겨진다.

하이 카드 : 아래에 있는 것 가운데 어떤 범주에도 속하지 않는 패는 그 중 가장 높은 카드의 값에 따라 등급이 매겨진다. 가장 높은 카드의 값이 같으면 그 다음 카드, 그 다음 카드도 같으면 그 다음 카드, 이런 식으로 등급이 매겨진다.

원 페어 : 다섯 장의 카드 가운데 두 장이 같은 경우. 같은 원 페어끼리 맞붙는 경우에는 더 높은 값을 가지는 원 페어 패에 더 높은 등급이 매겨진다. 값까지 같은 경우에는 나머지 카드의 값에 의해 더 높은 패가 결정된다.

투 페어 : 두 쌍의 카드가 같은 값을 가지는 경우, 투 페어끼리 맞붙는 경우에는 그 중 더 높은 페어의 값에 의해 더 높은 등급이 매겨진다. 두 쌍의 값이 모두 같으면 남은 카드에 의해 더 높은 패가 결정된다.

쓰리 카드 : 다섯장 가운데 세 장이 같은 값을 가지는 경우. 쓰리 카드끼리 맞붙는 경우에는 세장의 같은 값을 가지는 카드의 값에 의해 더 높은 패가 결정된다.

스트레이트: 다섯 장의 카드가 연속적인 값을 가지는 경우. 스트레이트끼리 맞붙을 경우에는 가장 높은 카드에 의해 더 높은 패가 결정된다.

플러시 : 다섯 장의 카드의 무늬가 모두 같은 경우, 플러시끼리 맞붙을 경우에는 하이 카드의 규칙에 따라서 더 높은 패가 결정된다.

풀 하우스 : 세 장의 카드가 같은 값을 가지고 나머지 두 장의 카드가 같은 값을 가지는 경우. 같은 값을 가지는 세장의 카드의 우열에 의해 더 높은 패가 결정된다.

포 카드 : 네 장의 카드가 같은 값을 가지는 경우. 포카드끼리 맞붙는 경우에는 네 장의 같은 값을 가지는 카드의 값에 의해 더 높은 패가 결정된다.

스트레이트 플러시 : 다섯 장의 카드가 무늬가 같으면서 모두 연속적인 값을 가지는 경우. 패에 있는 것 중 가장 높은 카드에 의해 더 높은 패가 결정된다.

몇 쌍의 포커패를 비교, 어느쪽이 이겼는지 아니면 무승부인지 알아내자.

입력

입력 파일은 여러 줄로 구성되며 각 줄에는 열 장의 카드를 나타내는 값이 들어간다. 앞에 있는 다섯 장의 카드는 "Black"이라는 참가자의 카드고 뒤에 있는 다섯장의 카드는 "White"라는 참가자의 카드다.

출력

입력된 각 줄에 대해 다음 중 한 가지가 들어있는 행을 출력한다.

Black wins.
White wins.
Tie.

입력 예

2H 3D 5S 9C KD 2C 3H 4S 8C AH
2H 4S 4C 2D 4H 2S 8S AS QS 3S
2H 3D 5S 9C KD 2C 3H 4S 8C KH
2H 3D 5S 9C KD 2D 3H 5C 9S KH

출력 예

White wins.
Black wins.
Tie.
Tie.

포커를 몰라서 이거 입력 예를 문자로 봐도 잘 모르겠다..;;
책의 출력예가 틀린 것 같아 고쳤다. 4개의 답이 맞는지 확인해 주시기 바란다.
예를 들어, 첫번째 게임이 책에선 Tie라고 나와있었는데, 두 패다 하이 카드고 white에게 A패가 있으므로 white가 승리하는게 맞는 것으로 보인다.


'Programming > Algorithm' 카테고리의 다른 글

ACM-ICPC 2009년도 기출 _ Candy War  (0) 2010.10.01
암호 깨기 (Crypt Kicker)  (0) 2010.09.30
동맹 휴업 (Hartal)  (0) 2010.09.03
유쾌한 점퍼(Jolly Jumpers)  (0) 2010.08.31
호주식 투표법(Australian Voting)  (0) 2010.08.27