Lavida 2369 루니 주니어의 영문 채점
문제 설명
루니의 후계자인 루니 주니어는 로봇들에게 영어 작문을 가르치는데 아버지인 루니와는 달리 작문에 사용한 단어의 길이가 길면 점수를 많이 주고, 본인이 좋아하는 특정 단어가 들어가면 가점을 주는 방식으로 문장에 대한 점수를 매긴다(이 때 대소문자는 따지지 않는다). 처음에는 루니 주니어가 직접 채점을 하였지만 가르치는 로봇들이 많아지자 귀찮아지기 시작하였다. 이제 여러분이 루니 주니어를 도와 줄 자동 채점 프로그램을 작성해 보자. 문장에서 점수를 주는 규칙은 다음과 같다.
사용한 모든 일반 단어(가점을 위해 별도로 입력되는 단어는 제외)에 대하여 단어의 길이(알파벳 글자수)에 2를 곱한 점수를 부여하여 합산한다.
가점을 주기 위한 단어와 그 단어에 대한 점수가 각각 입력되며, 그 단어가 문장 중에 들어 있으면 단어당 해당 점수를 합산한다(대소문자는 구별하지 않는다).
입력 설명
첫 줄에는 가점을 위한 영어 단어 개수 M(1≤M≤10)과 채점할 영어 문장이 N(1≤N≤5)이 입력되고, 그 다음 줄부터 M개의 영어 단어와 그 단어에 대한 가점이 한 줄에 하나씩 입력되고 N개의 영어 문장이 한 줄에 하나씩 입력되며 영어 문장의 끝은 항상 독립된 .(period)(마지막 단어와 period 사이에는 공백이 존재)로 끝난다. 영어 문장에서 적어도 하나의 단어는 존재하며, 사용되는 모든 단어의 최대 길이는 20 이하이고 대소문자가 함께 입력될 수 있으나 특수문자는 들어오지 않는 것으로 가정한다.
출력 설명
각 영어 문장에 대한 채점 결과를 한 줄에 하나씩 출력한다.
입력 예시
3 3
GOOD 20
Pretty 30
So 10
I am a King .
Thank you so much .
What a so pretty woman .
출력 예시
16
34
60
코드1
#include <stdio.h>
#include <string.h>
#include <ctype.h>
struct data
{
char arr[20];
int price;
};
int main()
{
struct data list[10];
int a, b, c, num, ccunt = 0;
int count = 0;
char oword[25];
scanf("%d %d", &a, &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);
if (oword[0] == '.') {
printf("%d\n", ccunt);
ccunt = 0;
break;
}
else {
num = strlen(oword);
ccunt += (num * 2);
for (int i = 0; i < a; i++)
{
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) {
ccunt += list[i].price;
ccunt -= (num * 2);
}
count = 0;
}
}
}
}
}
return 0;
}
나 : say
문제현황을 보면 똑같이 푼 문제들이 보이는데 이건 제가 최적화 작업을 하고 반복적으로 돌리기 때문입니다.
댓글남기기