반응형
출처: 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 |
댓글