본문 바로가기

알고리즘/문제풀이

[SWEA] 9760. Poker Game

반응형
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
	
	static String[] cards;
	static int[] suit, rank;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		int T = Integer.parseInt(br.readLine());
		
		for(int tc=1; tc<=T; tc++) {
			st = new StringTokenizer(br.readLine(), " ");
			suit = new int[4];
			rank = new int[14];
			cards = new String[5];
			int cardhand = 9;
			
			for(int i=0; i<5; i++) {
				cards[i] = st.nextToken();
				
				switch(cards[i].charAt(0)) {
				case 'S' : suit[0]++; break;
				case 'D' : suit[1]++; break;
				case 'H' : suit[2]++; break;
				case 'C' : suit[3]++; break;
				}
				
				switch(cards[i].charAt(1)) {
				case 'A' : rank[1]++; break;
				case '2' : rank[2]++; break;
				case '3' : rank[3]++; break;
				case '4' : rank[4]++; break;
				case '5' : rank[5]++; break;
				case '6' : rank[6]++; break;
				case '7' : rank[7]++; break;
				case '8' : rank[8]++; break;
				case '9' : rank[9]++; break;
				case 'T' : rank[10]++; break;
				case 'J' : rank[11]++; break;
				case 'Q' : rank[12]++; break;
				case 'K' : rank[13]++; break;
				}
			}
			
			
			// 8. One pair
			for(int i=1; i<rank.length; i++) if(rank[i] == 2) cardhand=8;
			
			// 7. Tow pair
			int cnt=0;
			for(int i=1; i<rank.length; i++) {
				if(rank[i] == 2) cnt++;
			}
			if(cnt == 2) cardhand=7;
			
			// 6. Three of a kind
			for(int i=1; i<rank.length; i++) if(rank[i] == 3) cardhand=6;
			
			// 5. Straight
			String s = "";
			String ss = "";
			for(int i=1; i<rank.length; i++) {
				s += rank[i];
			}
			for(int i=0; i<suit.length; i++) {
				ss += suit[i];
			}
			if(s.contains("11111")) {
				if(!ss.contains("5")) cardhand=5;
			}
			
			// 4. Flush
			for(int i=0; i<suit.length; i++) if(suit[i] == 5) cardhand = 4;
			
			// 3. Full House
			s = "";
			for(int i=1; i<rank.length; i++) {
				s+=rank[i];
			}
			if(s.contains("3") && s.contains("2")) cardhand = 3;
			
			// 2. Four of a Kind
			for(int i=1; i<rank.length; i++) if(rank[i] == 4) cardhand = 2;
			
			// 1.Straight Flush
			s = "";
			ss="";
			for(int i=1; i<rank.length; i++) {
				s += rank[i];
			}
			for(int i=0; i<suit.length; i++) {
				ss += suit[i];
			}
			if(s.contains("11111") && ss.contains("5")) cardhand=1;
			
			System.out.println("#" + tc + " " + toString(cardhand));
		}
	}

	public static String toString(int data) {
		if(data==1) return "Straight Flush";
		else if(data==2) return "Four of a Kind";
		else if(data==3) return "Full House";
		else if(data==4) return "Flush";
		else if(data==5) return "Straight";
		else if(data==6) return "Three of a kind";
		else if(data==7) return "Two pair";
		else if(data==8) return "One pair";
		else return "High card";

	}
}
반응형