[NYPC 2016 예선]마비노기 듀얼: 올바른 덱인가요?

문제풀이/기타 문제 2017.07.30 댓글 Plorence

게임을 진행하려면 이 카드들을 12장 이하로 모아 하나의 덱(deck)을 구성해야 한다. 이때, 각 덱은 최대 세 종류의 자원을 섞어서 구성할 수 있다.

12장 이하의 카드들이 요구하는 자원의 목록이 주어질 때, 이 카드들이 올바른 덱을 구성하는지 아닌지 판단하는 프로그램을 작성하여라.

입력

첫 줄에 카드의 수 N이 주어진다. N은 1 이상 12 이하이다. 다음 N개의 줄에 걸쳐 gold(골드), mana(마나), light(빛), dark(어둠), nature(자연) 중 하나의 문자열이 주어진다. 이는 각 카드가 요구하는 자원을 뜻한다.

출력

주어진 카드들이 올바른 덱을 구성한다면 valid를, 아니라면 invalid를 출력한다.

입력 예시 1

1
2
3
4
5
6
7
8
9
10
11
12
13
12
gold
gold
gold
gold
gold
gold
gold
gold
gold
gold
gold
gold
cs

출력 예시 1

1
valid
cs

단일 자원으로 구성된 덱은 올바른 덱이다.

입력 예시 2

1
2
3
4
5
6
7
8
9
10
11
12
13
12
light
light
light
light
nature
mana
mana
nature
mana
mana
mana
nature
cs

출력 예시 2

1
valid
cs

세 종류의 자원으로 구성된 덱은 올바른 덱이다.

입력 예시 3

1
2
3
4
5
6
5
gold
mana
light
dark
nature
cs

출력 예시 3

1
invalid
cs

다섯 종류의 자원으로는 덱을 구성할 수 없다.

입력 예시 4


1
2
3
4
5
6
7
8
9
10
11
12
13
12
light
light
light
dark
dark
light
light
light
light
light
dark
light
cs

출력 예시 4

1
valid
cs

코드(Code)

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
 
int Check(char arr[][100], int count);
int main(void) {
    char arr[100][100];
    int count = 0;
    int CheckNumber = 0;
    scanf("%d"&count);
    for (int i = 0; i < count; i++) {
            scanf("%s"&arr[i][0]);
    }
    CheckNumber = Check(arr,count);
    if (CheckNumber == 0) {
        printf("valid \n");
    }
    else {
        printf("invalid \n");
    }
 
}
int Check(char arr[][100], int count) {
    int Light = 0, Nature = 0, Mana = 0, Gold = 0, Dark = 0;
    int CheckNumber = 0;
    for (int i = 0; i < count; i++) {
        if (arr[i][0== 'M' || arr[i][0== 'm') {
            Mana++;
        }
        else if (arr[i][0== 'L' || arr[i][0== 'l') {
            Light++;
        }
        else if (arr[i][0== 'N' || arr[i][0== 'n') {
            Nature++;
        }
        else if (arr[i][0== 'G' || arr[i][0== 'g') {
            Gold++;
        }
        else if (arr[i][0== 'D' || arr[i][0== 'd') {
            Dark++;
        }
    }
    if (Mana != 0) {
        CheckNumber++;
    }
    if (Gold != 0) {
        CheckNumber++;
    }
    if (Light != 0) {
        CheckNumber++;
    }
    if (Nature != 0) {
        CheckNumber++;
    }
    if (Dark != 0) {
        CheckNumber++;
    }
    if (CheckNumber <= 4) {
        return 0;
    }
    else {
        return 1;
    }
}
cs


댓글