반응형
문제
현준이는 컴퓨터 인터넷이 느린 것을 알고, 제어판에 들어가 보니 여러 악성 프로그램이 설치 되어 있었다.
현준이 컴퓨터 인터넷이 빨라지도록 도와주기 위해 제어판에 있는 프로그램을 입력하면 악성 프로그램과, 컴퓨터의 위험도를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 프로그램이 입력될 갯수 정수 n이 입력된다.(1<=n<=100)
둘째 줄부터 n줄에 걸쳐 프로그램명인 문자열이 입력된다.(글자 수 : 50글자 이내)
출력
1. 악성 프로그램인지 아닌지 확인하는 방법 :
가. 프로그램명이 3글자 이하면 악성 프로그램이다.
나. 프로그램명에 tap이 들어가면 악성 프로그램이다.
다. 프로그램명에 xocure이 들어가면 악성 프로그램이다.
2. 컴퓨터의 위험도 출력 방법 :
가. 입력된 프로그램명 중에서 악성 프로그램 수가 0~3개이면 safe,
나. 악성 프로그램 수가 4~6개이면 warning,
다. 악성 프로그램 수가 7개 이상이면 danger을 출력하시오.
예제 입력
8 windows tap hi microsoft office 2013 xocure web player xecure safe goclean alyac von
예제 출력
windows tap hi xocure web player von warning
풀이
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, virus = 0;
char **arr = malloc(sizeof(char *) * n);
scanf("%d\n", &n);
for (int i = 0; i < n; i++)
{
arr[i] = malloc(sizeof(char) * 50);
scanf(" %[^\n]s", arr[i]);
}
for (int i = 0; i < n; i++)
{
if (strlen(arr[i]) <= 3)
{
printf("%s\n", arr[i]);
virus++;
continue;
}
if (strstr(arr[i], "xocure") != NULL)
{
printf("%s\n", arr[i]);
virus++;
continue;
}
if (strstr(arr[i], "tap") != NULL)
{
printf("%s\n", arr[i]);
virus++;
continue;
}
free(arr[i]);
}
if (virus >= 7)
{
printf("danger");
}
else if (virus >= 4 && virus <= 6)
{
printf("warning");
}
else
{
printf("safe");
}
free(arr);
}
strstr 함수를 사용해 쉽게 해결할 수 있었다.
다만 이미 진단된 바이러스가 다시 진단되는 경우를 방지하기 위해, 바이러스를 진단하는 부분에 continue; 를 추가해
이미 진단 된 문자열은 다시 진단되지 않도록 한다.
반응형