https://www.acmicpc.net/problem/14696
14696번: 딱지놀이
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 딱지놀이의 총 라운드 수를 나타내는 자연수 N이 주어진다. N 은 1 이상 1,000 이하이다. 다음 줄에는 라운드 1에서 어린이 A가 내는 딱지에 나
www.acmicpc.net
위 문제를 요약하면 다음과 같다.
별, 동그라미, 네모, 세모의 개수 순으로 많을수록 게임에서 이기게 되는 것이다. 만약 네 개의 모양의 개수가 모두 같을 경우 무승부로 판별하게 된다.
만약 A가 이기면 A를, B가 이기면 B를, 무승부이면 D를 출력한다. 이때 줄을 바꾸어 출력해야 한다.
많은 더 좋은 방법이 있을 수 있지만 가장 떠올리기 쉬운 방법이다. 별의 개수를 세고, 동그라미 개수를 세고, 네모의 개수를 세고, 세모의 개수를 센 뒤 비교하는 것이다. 그렇게 비교해서 승부의 여부와 승자를 출력할 수 있게 된다.
밑에 있는 코드에서 cnt의 종류 중 1은 세모를, 2는 네모를, 3은 동그라미를, 4는 별을 의미하고 그 개수를 저장한다.
if문을 따라가면 4-3-2-1 순으로 처리하여 승자를 출력하게 된다.
#include <iostream>
using namespace std;
int N; // 1 <= N <= 1000
int a, b;
int A[101], B[101];
int cnta1, cntb1, cnta2, cntb2, cnta3, cntb3, cnta4, cntb4;
void solve()
{
for(int i=0; i<a; i++){
if(A[i]==1) cnta1++;
if(A[i]==2) cnta2++;
if(A[i]==3) cnta3++;
if(A[i]==4) cnta4++;
}
for(int i=0; i<b; i++){
if(B[i]==1) cntb1++;
if(B[i]==2) cntb2++;
if(B[i]==3) cntb3++;
if(B[i]==4) cntb4++;
}
if(cnta4==cntb4){
if(cnta3==cntb3){
if(cnta2==cntb2){
if(cnta1==cntb1){
printf("D\n");
}
else if(cnta1>cntb1){
printf("A\n");
}
else{
printf("B\n");
}
}
else if(cnta2>cntb2){
printf("A\n");
}
else{
printf("B\n");
}
}
else if(cnta3>cntb3){
printf("A\n");
}
else{
printf("B\n");
}
}
else if(cnta4>cntb4){
printf("A\n");
}
else{
printf("B\n");
}
}
void input()
{
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d", &a);
for(int i=0; i<a; i++){
scanf("%d", &A[i]);
}
scanf("%d", &b);
for(int i=0; i<b; i++){
scanf("%d", &B[i]);
}
solve();
cnta1 = cnta2 = cnta3 = cnta4 = cntb1 = cntb2 = cntb3 = cntb4 = 0;
}
}
int main()
{
input();
return 0;
}
'Algorithm' 카테고리의 다른 글
숫자 뒤집기(S) (0) | 2023.04.04 |
---|---|
BOJ 2477 (0) | 2023.04.03 |
BOJ 2506 (0) | 2023.04.03 |
Quiz7_구와 구의 충돌 (0) | 2023.03.30 |
Quiz 7_원과 사각형의 충돌 (0) | 2023.03.30 |