ascode 1170: 영문 채점 #3

2 분 소요

문제 설명

준영이는 특정 규칙에 따라 영어 문장의 점수를 자동으로 매기는 프로그램을 작성하려고 한다. 특정 규칙이란 지정된 특정 단어에 따라 가점 또는 감점을 하게 된다. 이제 여러분은 준영이를 돕기 위해 채점 프로그램을 작성해 보자. 문장에서 점수를 매기는 규칙은 다음과 같다.

테스트케이스 별로 주어지는 가점 단어들이 문장 중에 어디라도 나타나면 대소문자에 관계없이 해당 단어에 주어진 점수를 더한다(대소문자 구별하지 않음).

테스트케이스 별로 주어지는 감점 단어들이 문장 중에 어디라도 나타나면 대소문자에 관계없이 해당 단어에 주어진 점수를 감점한다(대소문자 구별하지 않음).

이상의 경우를 제외한 모든 단어에 대해서는 각 단어 길이를 합산한다. 최종 계산된 값이 0보다 큰 경우에는, 문장에 포함되어 있는 감점 단어수로 나눈 값을 최종 점수로 출력하되 감점 단어가 없을 경우에는 그대로 출력한다.(소숫점 이하의 값은 버린다.) 최종 점수가 0 이하인 경우에는 FAIL을 출력한다.

입력 설명

첫 줄에 가점을 위한 단어의 수(p, 1<=p<=10)와 감점을 위한 단어의 수(m, 1<=m<=10)그리고 채점할 영어 문장의 수(n, 1<=n<=10)가 주어진다.

다음 줄부터 가점을 위한 영어 단어와 더할 점수(1 이상, 30 이하) 쌍이 p줄 입력되고, 다음으로 감점을 위한 영어 단어와 감점할 점수(1 이상, 30 이하) 쌍이 m줄 입력된 후 영어 문장이 n개 입력된다. 단, 가점을 위한 단어와 감점을 위한 단어는 중복되는 경우가 없으며, 각 영어 문장의 끝은 항상 독립된 .(period)(마지막 단어와 period 사이에는 공백이 존재)로 끝난다.

사용되는 모든 단어의 최대 알파벳 수는 20이하이며 . (period) 이외의 특수 문자는 들어오지 않는다.

출력 설명

각 문장당 채점 결과를 한 줄에 하나씩 출력한다. 최종 점수가 0 이하인 경우에는 FAIL을 출력한다.

입력 예시

2 2 3
GOOD 10
best 25
bad 10
Not 5
this is my BEST friend He is very good man .
What a bad world .
What a not wonderful bad World .

출력 예시

60
FAIL
2

코드1

#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
struct data
{
    char arr[25];
    int price;
};
 
int main()
{
    struct data list[20];
    int p, m, n; // p: 가점단어 ,m : 감점단어 , n: 문장개수
    int c;
    int num, result = 0, check = 0;
    int count = 0;
    char oword[25];
 
    scanf("%d %d %d", &p, &m, &n);
    for (int i = 0; i < (p + m); i++) {
        scanf("%s", &list[i].arr);
        scanf("%d", &list[i].price);
    }
    for (int i = 0; i < n; i++) {
        while (1) {
            scanf("%s", oword);
            if (oword[0] == '.') {
               if (check == 0) {
                       printf("%d\n", result);
               }else {
                  if (result / check <= 0) {
                       printf("FAIL\n");
                  }else {
                       printf("%d\n", result / check  );
                  }
               }
                result = 0, check = 0;
                break;
            }
            else {
                num = strlen(oword);
                result += num;
                for (int i = 0; i < (p + m); i++)
                {
                    //가점
                    if (i < p) {
                        if (num == strlen(list[i].arr)) {
                            for (c = 0; c < num; c++)
                            {
                                if (tolower(oword[c]) == tolower(list[i].arr[c])) {
                                    count++;
                                }
                            }
                            if (count == num) {
                                result += list[i].price;
                                result -= num;
                            }
                            count = 0;
                        }
                    }
                    //감점
                    else {
                        if (num == strlen(list[i].arr)) {
                            for (c = 0; c < num; c++)
                            {
                                if (tolower(oword[c]) == tolower(list[i].arr[c])) {
                                    count++;
                                }
                            }
                            if (count == num) {
                                 
                                result -= list[i].price;
                                result -= num;
                                check++;
                            }
                            count = 0;
                        }
                    }
                }
            }
        }
    }
    return 0;
}

나 : say

이꺼 때문에 많이 혼났서요

댓글남기기