Lavida 2131 호날두의 영문 채점

2 분 소요

문제 설명

루니의 후계자인 호날두는 로봇들에게 영어 작문을 가르치고 점수를 매기는데 작문에 사용한 단어의 길이가 길면 점수를 많이 주고, 주제에 따라 싫어하는 특정 단어가 들어가면 감점을 하는 방식으로 문장에 대한 점수를 매긴다(대소문자를 따지지 않는다). 처음에는 호날두가 직접 채점을 하였지만 가르치는 로봇들이 많아지자 귀찮아지기 시작하였다. 이제 여러분이 호날두를 도와 줄 자동 채점 프로그램을 작성해 보자. 문장에서 점수를 주는 규칙은 다음과 같다.

영어 문장에서 사용한 모든 단어(감점을 위해 입력되는 단어는 제외)에 대하여 단어의 각 길이(알파벳 글자수)를 10으로 나눈 나머지를 부여하여 합산한다.

테스트케이스 별로 주어지는 단어들이 문장 중에 나타나면 해당 단어에 주어진 점수들을 감점한다.

입력 설명

첫 줄에는 문장의 수(테스트 케이스) T가 입력된다.(1 <= T <= 5)

다음 줄에 감점을 위한 단어의 수(m, 1<=m<=10)과 채점할 영어 문장의 수(n, 1<=n<=10)이 주어진다. 다음 줄부터 감점을 위한 영어 단어와 감점할 점수(1 이상, 30 이하) 쌍이 m줄 입력되고 난 다음에 영어 문장이 n개 입력되며 각 영어 문장의 끝은 항상 독립된 .(period)(마지막 단어와 period 사이에는 공백이 존재)로 끝난다. 이상의 같은 구조의 입력 데이터 덩어리가 T개 만큼 입력된다. 사용되는 모든 단어의 최대 알파벳 수는 25 이하이며 대소문자가 함께 입력될 수 있으나 채점에서는 구별하지 않으며, 특수문자는 들어오지 않는 것으로 가정한다.

출력 설명

각 문장당 채점 결과를 한 줄에 하나씩 출력한다.

입력 예시

2
2 2
BAD 5
Not 15
What a wonderful world .
What a bad world .
3 1
Never 7
Fast 1
Die 20
you can never see the fast car over there .

출력 예시

19
5
16

코드

#include <stdio.h>
#include <string.h>
#include <ctype.h>
struct data
{
	char arr[25];
	int price;
};

int main()
{
	struct data list[10];
	int testcase, stop = 0, p = 0, temp = 0;
	int a, b, c, u, count = 0;
	int ccunt = 0, discount = 0;
	char oword[25];
	scanf("%d", &testcase);
	for (int i = 0; i < testcase; i++)
	{
		scanf("%d", &a);
		scanf("%d", &b);
		for (int i = 0; i < a; i++)
		{
			scanf("%s", &list[i].arr);
			scanf("%d", &list[i].price);
		}
		for (int i = 0; i < b; i++)
		{
			while (1)
			{
				scanf("%s", &oword);
				u = strlen(oword);
				ccunt += (u % 10);
				if (oword[0] == '.')
				{
					printf("%d\n", (ccunt - temp - 1) - discount);
					ccunt = 0, discount = 0, count = 0, temp = 0;
					break;
				}
				else
				{
					for (c = 0; c < a; c++)
					{
						if (u == strlen(list[c].arr))
						{
							for (int i = 0; i < u; i++)
							{
								if (tolower(oword[i]) == tolower(list[c].arr[i]))
								{
									count++;
								}
							}
							if (count == u)
							{
								discount += list[c].price;
								temp += (u % 10);
								count = 0;
							}
							else if (count != u)
							{
								p++;
								count = 0;
							}
						}
					}
				}
			}
		}
	}
	return 0;
}

나 : say

시** 9시간동안 풀었다.

댓글남기기