Computer/Algorithm

Daily Algorithm - 악성 프로그램 삭제하기

kentakang 2018. 3. 31. 13:23
반응형

문제

현준이는 컴퓨터 인터넷이 느린 것을 알고, 제어판에 들어가 보니 여러 악성 프로그램이 설치 되어 있었다.

현준이 컴퓨터 인터넷이 빨라지도록 도와주기 위해 제어판에 있는 프로그램을 입력하면 악성 프로그램과, 컴퓨터의 위험도를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 프로그램이 입력될 갯수  정수 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; 를 추가해

이미 진단 된 문자열은 다시 진단되지 않도록 한다.


문제 출처 : http://codeup.kr/JudgeOnline/problem.php?id=1640


반응형