반응형
카드게임 문제는 단순하게 구현만 하면 되지만, 단순하다는 것이 그냥 단순하지는 않습니다.
카드의 개수가 정해져 있기 때문에 구현만 제대로 한다면, 시간이나 메모리 등에 구애받지는 않습니다.
문제에 맞추어서 조건문만 잘 나열해서 푸는 문제입니다.
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
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2624 동전 바꿔주기(동적계획법) (0) | 2024.05.10 |
---|---|
[C/C++] 백준 #2623 음악프로그램(위상정렬) (0) | 2024.05.10 |
[C/C++] 백준 #2608 로마 숫자(구현) (2) | 2024.04.26 |
[C/C++] 백준 #2607 비슷한 단어(구현) (2) | 2024.04.19 |
[C/C++] 백준 #2606 바이러스(너비 우선 탐색) (0) | 2024.04.19 |
댓글