BOJ_2621_카드게임_JAVA
문제 : 카드게임
링크 : BOJ_2621_카드게임
접근 방식
카드게임이라고 쓰여있지만 사실상 포커의 룰을 적용하는 문제이다. 포커에 익숙하다면 조건을 찾는 것이 더 쉬울 수 있다.
그렇지만 포커를 잘 몰라도 조건에 대한 설명이 잘 쓰여있기 때문에, 문제에 적힌대로 차근차근 조건만 완성해나가면 충분히 풀 수 있는 문제이다.
두 개 이상의 조건을 만족하면 더 큰 점수를 얻기 때문에, 나는 가장 많은 점수를 얻을 수 있는 첫 번째 조건부터 체크를 하여 조건을 만족하는 순간 답을 출력하고 시스템을 종료하게 만들었다.
카운트 배열을 사용하여 숫자의 개수를 세었는데, 범위체크를 잘못하여 3번 틀렸다. 꼼꼼하게 살펴볼 필요가 있었던 것 같다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
// 포커임
public class BOJ_2621_카드게임 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int[][] card = new int[5][2];
int[] cntCard = new int[10];
int maxNum = 0;
for (int i = 0; i < 5; i++) {
st = new StringTokenizer(in.readLine());
card[i][0] = st.nextToken().charAt(0) - 'A';
card[i][1] = st.nextToken().charAt(0) - '0';
maxNum = Math.max(maxNum, card[i][1]);
}
// 1. 로티플?
boolean isroti1 = true;
boolean isroti2 = false;
for (int i = 0; i < 5; i++) {
cntCard[card[i][1]]++;
}
for (int i = 1; i < 5; i++) {
// 색깔이 다른 경우 break;
if (card[0][0] != card[i][0]) {
isroti1 = false;
break;
}
}
// System.out.println(Arrays.toString(cntCard));
int cnt = 1;
for (int i = 1; i <= 9; i++) {
if (cntCard[i] == 1 && cntCard[i - 1] == 1) {
cnt++;
}
}
if (cnt == 5) {
isroti2 = true;
}
if (isroti1 && isroti2) {
System.out.println(maxNum + 900);
System.exit(0);
}
// 2. 포카드
for (int i = 1; i <= 9; i++) {
if (cntCard[i] >= 4) {
System.out.println(i + 800);
System.exit(0);
}
}
// 3. 풀하우스
int house1 = 0;
int house2 = 0;
for (int i = 1; i <= 9; i++) {
if (cntCard[i] == 3) {
house1 = i;
}
if (cntCard[i] == 2) {
house2 = i;
}
}
if (house1 != 0 && house2 != 0) {
System.out.println(house1*10 + 700+house2);
System.exit(0);
}
// 4. 플러시
if(isroti1) {
System.out.println(maxNum + 600);
System.exit(0);
}
// 5. 스트레이트
if(isroti2) {
System.out.println(maxNum + 500);
System.exit(0);
}
// 6. 트리플
if(house1 != 0) {
System.out.println(house1 + 400);
System.exit(0);
}
// 7. 투 페어
int one = 0;
int two = 0;
for(int i=1;i<=9;i++) {
if(cntCard[i] == 2 && one == 0) {
one = i;
}else if(cntCard[i] == 2){
two = i;
}
}
if(one != 0 && two != 0) {
System.out.println(two*10 + 300 + one);
System.exit(0);
}
// 8. 원 페어
if(one != 0) {
System.out.println(200 + one);
System.exit(0);
}
// 9. top
System.out.println(maxNum+ 100);
}
}