본문 바로가기

문제 노트/정올

딱지놀이( BOJ 14696 )

문제 : https://www.acmicpc.net/problem/14696

 

14696번: 딱지놀이

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 딱지놀이의 총 라운드 수를 나타내는 자연수 N이 주어진다. N 은 1 이상 1,000 이하이다. 다음 줄에는 라운드 1에서 어린이 A가 내는 딱지에 나

www.acmicpc.net

 

문제 파악하기

A와 B의 딱지놀이 결과를 출력하는 문제입니다. 딱지에는 별(★), 동그라미(●), 네모(■), 세모(▲) 중 하나의 그림이 그려져있으며 우리는 A와 B가 가지고 있는 모든 딱지의 개수를 파악하여 승패를 알아내야 합니다. 승패를 가르는 중요한 요소는 바로 그림의 가중치라고 할 수 있습니다. 모든 그림에는 각기 다른 가중치가 부여되어 있으며, 그림 사이의 대소관계는 다음과 같습니다.

별(★) > 동그라미(●) > 네모(■) > 세모(▲)

 

우리는 위의 대소관계를 구분하는 알고리즘을 만들어 문제를 해결해야 합니다. 그럼 어떤 방법을 사용할 수 있을까요? 여러가지 있지만 가장 간단한 방법을 소개해드리겠습니다.

 

문제 해결하기

대소관계를 구분하는 가장 간단한 방법은 바로 배열을 사용하는 방법입니다. 각각의 그림만큼 배열을 2개 만든 다음, 두 학생이 가진 카드 개수만큼 배열의 값을 각각 증가시켜줍니다. 그 다음 별(★)부터  세모(▲)까지 확인하면서 어느 한 학생의 카드가 많은 순간 탐색을 종료하고 결과를 출력하면 됩니다.

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <string.h>
#define NMAX 5
 
int T, N;
 
int nA, nB, v;
int A[NMAX], B[NMAX];
 
char f;
 
int main() {
    for(scanf("%d"&T);T>0;T--) {
        // init
        memset(A, 0sizeof(A));
        memset(B, 0sizeof(B));
 
        // input
        scanf("%d"&nA);
        for(int i=1;i<=nA;i++) {
            scanf("%d"&v);
            A[v]++;
        }
        scanf("%d"&nB);
        for(int i=1;i<=nB;i++) {
            scanf("%d"&v);
            B[v]++;
        }
 
        // 판별
        f = 'D';
        for(int i=4;i>0;i--) {
            if(A[i] > B[i]) {
                f = 'A';
                break;
            }
            else if(A[i] < B[i]) {
                f = 'B';
                break;
            }
        }
 
        // 출력
        printf("%c\n", f);
    }
}
cs

후기

기본적인 구현 문제라고 생각합니다. 가중치이기 때문에 숫자를 부여하는 방식으로도 해결할 수 있다고 생각합니다. 알고리즘을 시작하는 사람들에게 추천하고 싶은 문제입니다.

 

'문제 노트 > 정올' 카테고리의 다른 글

행복( BOJ 15969 )  (0) 2021.11.23
방 배정하기( BOJ 14697 )  (0) 2021.11.23
369 게임( BOJ 10802 )  (0) 2021.11.20
막대기( BOJ 17608 )  (0) 2021.11.15
369( BOJ 17614 )  (0) 2021.11.15