본문 바로가기
Programming/BOJ

[C/C++] 백준 #2621 카드게임(구현)

by 작은별하나 2024. 4. 30.
반응형

카드게임 문제는 단순하게 구현만 하면 되지만, 단순하다는 것이 그냥 단순하지는 않습니다.

카드의 개수가 정해져 있기 때문에 구현만 제대로 한다면, 시간이나 메모리 등에 구애받지는 않습니다.

 

card game

 

문제에 맞추어서 조건문만 잘 나열해서 푸는 문제입니다.

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

 

같은 색인지 판별하기 위해서 전처리를 해서 판단을 하도록 하열고, 정렬을 함으로써 연속된 숫자 등을 판단하기 편하게 하였습니다.

if - else if 문을 이용해서 줄줄히 조건을 나열한 것 이외에는 크게 다른 작업을 할 일은 별로 없습니다.  포커의 룰을 프로그램에 적용할 때에도 유용하죠.

 

//------------------------------------------------
//    baekjoon #2621
//        - by Aubrey Choi
//        - created at 2019-11-14
//------------------------------------------------
#include <stdio.h>
#include <algorithm>

int main()
{
    int v[5], s, i, score; char c[4]; int fl;
    for(i=0;i<5;i++) { scanf("%s%d",c,v+i); if(i==0) fl=c[0]; else fl=(fl==c[0])?fl:0; }
    std::sort(v,v+5);
    for(i=1;i<5;i++) if(v[i]!=v[0]+i) break; bool st=i==5;
    if(st&&fl) score=900+v[4];
    else if(v[1]==v[2]&&v[2]==v[3]&&(v[0]==v[1]||v[3]==v[4])) score=800+v[1];
    else if(v[0]==v[1]&&v[1]==v[2]&&v[3]==v[4]) score=700+v[0]*10+v[4];
    else if(v[0]==v[1]&&v[2]==v[3]&&v[3]==v[4]) score=700+v[4]*10+v[0];
    else if(fl) score=600+v[4];
    else if(st) score=500+v[4];
    else if(v[0]==v[1]&&v[1]==v[2]) score=400+v[0];
    else if(v[1]==v[2]&&v[2]==v[3]) score=400+v[1];
    else if(v[2]==v[3]&&v[3]==v[4]) score=400+v[2];
    else if(v[0]==v[1]&&v[2]==v[3]) score=300+v[2]*10+v[0];
    else if(v[0]==v[1]&&v[3]==v[4]) score=300+v[3]*10+v[0];
    else if(v[1]==v[2]&&v[3]==v[4]) score=300+v[3]*10+v[1];
    else if(v[0]==v[1]) score=200+v[0];
    else if(v[1]==v[2]) score=200+v[1];
    else if(v[2]==v[3]) score=200+v[2];
    else if(v[3]==v[4]) score=200+v[3];
    else score=100+v[4];
    printf("%d\n",score);
}
728x90

댓글