[python] 1978_소수찾기

yeco_ob·2023년 2월 4일
0

알고리즘 문제 풀이

목록 보기
12/24

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. 주어진 수들 중 소수의 개수를 출력한다.

해결 방법

이 문제는 소수를 어떻게 구할지만 생각하면 풀 수 있다. 소수는 1, 자신 이렇게 2가지 약수만을 가지는 수이다.

즉, 값을 range(2, 값)으로 나눠서 나머지가 0이 나오면 그 수는 소수가 아닌 것이다.

1번의 코드를 짜다가 그냥 에러값 만들지 말고 소수가 아닌 반복문이 나오면 해당 반복문을 바로 나와버리고싶어서 생각한 코드가 2번이다.

  1. 나머지 연산 반복문을 하다가 0이 나오면 에러값을 +1 하고 반복문이 끝난 후 에러값이 0이면 해당 값을 출력하기

  2. 나머지 연산 반복문을 하다가 0이 나오면 sosu 변수에 False 값을 주고 내부 반복문 탈출(break). sosu가 True라면 카운트.

제출

  1. 메모리: 31256KB, 시간: 44MS
N = int(input()) #수의 개수 N 입력
arr = list(map(int,input().split())) #자연수 입력 받기
cnt = 0 #소수의 수 카운트

for num in arr:
  error = 0
  if num > 1:
    for i in range(2, num): #2 ~ 본인 값 -1 까지 반복
      if num % i == 0: #나머지가 0이라면(약수가 있다면)
        error += 1 #에러에 1추가
    if error == 0: #반복문이 끝나고 에러가 0이라면
      cnt += 1 #카운트
      
print(cnt)
  1. 메모리: 31256KB, 시간: 40MS
n = int(input())
arr = list(map(int,input().split()))
cnt = 0

for num in arr:
    if num <= 1: #수가 1보다 작다면
        continue #5번의 다음 반복문 실행
    sosu = True #소수는 True로 기본 설정
    for i in range(2, num): #2 ~ num-1로 나누는 동안: 
        if num % i == 0: #나머지가 0이 나오면
            sosu = False #소수가 아님
            break #9번 반복문 깨고 5번의 다음 반복문 실행
    if sosu: #소수가 True라면 카운트
        cnt += 1
        
print(cnt)

메모

파이썬 들여쓰기 매직아이같다. (ノ◕ヮ◕)ノ*:・゚✧

0개의 댓글