플로렌스라는 개발자

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

문제풀이/기타 문제 2017.07.30 댓글 0 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


    댓글

    0