본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 2621 카드 게임

by 까망 하르방 2021. 2. 17.
반응형

출처https://www.acmicpc.net/problem/2621

 Input 

B 3

B 7

R 1

B 2

Y 7

  

 Output 

207 

주어진 규칙을 모두 구현한 후 각 조건에서 구해지는 점수 중 최대값을 구해주면 됩니다.

카드의 조합을 Poker에 비유하다면 분기조건을 보기 좋게 설계할 수 있습니다


#include <stdio.h>
inline int max(int A, int B) { if (A > B) return A; return B; }
inline int min(int A, int B) { if (A < B) return A; return B; }
int color[4], digit[10]; // R B Y G + 1 ~ 9
int maxNum, pair1, pair2, triple, quad;
 
int main(void) {
    // freopen("input.txt", "r", stdin);
    for (int i = 0; i < 5; i++) {
        char c;
        int d;
        scanf(" %c %d", &c, &d);
        // 색상 표시
        if (c == 'R')
            color[0]++;
        else if (c == 'B')
            color[1]++;
        else if (c == 'Y')
            color[2]++;
        else
            color[3]++;
        // 숫자 표시
        digit[d]++;
        maxNum = max(maxNum, d);
    }
 
    // 같은 숫자 개수 확인
    for (int i = 1; i <= 9; i++) {
        if (digit[i] == 2) {
            // 같은 숫자가 2개인 개수 파악
            if (pair1 > 0) pair2 = i;
            else pair1 = i;
        }
        else if (digit[i] == 3)
            triple = i;
        else if (digit[i] == 4)
            quad = i;
    }
 
    bool isFlush = false;
    if (color[0] == 5 || color[1] == 5 || color[2] == 5 || color[3] == 5)
        isFlush = true;
    bool isStraight = false;
    for (int i = 1; i <= 6; i++) {
        if (digit[i] && digit[i + 1] && digit[i + 2] && digit[i + 3] && digit[i + 4]) {
            isStraight = true;
        }
    }
    // 각 조건에 해당하는 점수
    if (isFlush && isStraight)
        printf("%d\n", 900 + maxNum);
    else if (isFlush) 
        printf("%d\n", 600 + maxNum);
    else if (isStraight) 
        printf("%d\n", 500 + maxNum);
    else if (quad != 0) 
        printf("%d\n", 800 + quad);
    else if (triple != 0 && pair1 != 0) 
        printf("%d\n", 700 + 10 * triple + pair1);
    else if (triple != 0) 
        printf("%d\n", 400 + triple);
    else if (pair1 != 0 && pair2 != 0) 
        printf("%d\n", 300 + 10 * max(pair1, pair2) + min(pair1, pair2));
    else if (pair1 != 0)  
        printf("%d\n", 200 + pair1);
    else 
        printf("%d\n", 100 + maxNum);
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2578 빙고  (0) 2021.02.17
[BOJ] 백준 2502 떡 먹는 호랑이  (0) 2021.02.17
[BOJ] 백준 10801 카드게임  (0) 2021.02.17
[BOJ] 백준 10798 세로읽기  (0) 2021.02.17
[BOJ] 백준 2526 싸이클  (0) 2021.02.17

댓글