본문 바로가기
Algorithm

BOJ 14696

by Edward Agape Kim 2023. 4. 3.

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