문제 링크
난이도 : 브론즈 2

문제 내용

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

문제 분석

소수인지 검사해서 맞으면 ++

작성한 코드

#include <bits/stdc++.h>
 
using namespace std;
 
bool isPrime(int n){
    if (n < 2) return false;
    for(int i = 2; i * i <= n; i++){
        if(n%i==0) return false;
    }
    return true;
}
 
int main(){
    int n;
    int answer=0;
    for(scanf("%*d");scanf("%d",&n) != 0;){
        if(isPrime(n))answer++;
    }
    printf("%d", answer);
}

이랬는데 계속 시간초과 뜨길래 왜지?? 했는데..

scanf(”%d”,&n) 했을 때 아무것도 안받아오면 0이 아니고 EOF 반환함..

#include <bits/stdc++.h>
 
using namespace std;
 
bool isPrime(int n){
    if (n < 2) return false;
    for(int i = 2; i * i <= n; i++){
        if(n%i==0) return false;
    }
    return true;
}
 
int main(){
    int n;
    int answer=0;
    scanf("%d", &n);
    while(n--){
        int k = 0;
        scanf("%d", &k);
        if(isPrime(k)) answer++;
    }
    
    printf("%d", answer);
}

이건 돌아감

우수 코드 분석

#include<stdio.h>
int main()
{
	int n,h=0,a,i;
	scanf("%d", &n);
	while (n--)
	{
		scanf("%d", &a);
		for (i = 2; i < a; i++)
			if ((a % i) == 0) break;
		if (i == a) h++;
	}
	printf("%d", h);
}

내가 짠 코드랑 유사함