[백준] 1978번(소수 찾기)

·2023년 2월 1일

백준 문제풀이

목록 보기
26/159

백준 1978번


최종 제출 코드

number = int(input())
numbers = list(input().split())
prime = 0

for j in range(number):
  nums = int(numbers[j])
  count = 0
  
  # for i in range(2, nums):
  for i in range(1, nums):
    if nums % i == 0:
      count += 1
      
  # if count==0:
  if count==1:
    prime +=1
    
print(prime)
  • 1은 소수가 아니기 때문에 두 번째 for문에 들어가지 못해도 상관없음
  • 그래서 처음엔 범위를 range(2, nums):로 작성 & 소수인지 검사하는 조건물을 if count==0:으로 작성
    => 1은 range(2, nums) 범위에 들어가지 않기 때문에 나누어 떨어지는 수가 있는지 검사하는 조건문을 실행하지 못함
    => 1을 count==0에 따라 소수로 간주하게 됨
  • 1을 제외한 나누어 떨어지는 수가 있는지 확인하는 코드로 변경

처음 제출한 코드

number = int(input())
numbers = list(input().split())
prime = 0

for j in range(number):
  nums = int(numbers)
  for i in range(2, nums):
    if nums % i == 0:
      break
    prime += 1
print(prime)

<오류>

  • break가 일어나지 않으면 prime 변수는 두 번째 for문을 돌 때마다 증가함
  • prime += 1을 바깥 for문으로 꺼내도 prime 변수를 증가시키는 조건문이 없으면 for문을 돌 때마다 증가시키는 것은 동일
    => 1) 해당 수가 나누어 떨어지는 다른 수가 있는지를 검사하는 조건문 뿐만 아니라 2) 1)의 결과에 따라 해당 수가 소수인지를 검사하는 조건문이 필요함

다른 사람이 작성한 코드

mylist = [i for i in range(2, 1000)]
for i in range(2, 1000):
    for j in range(2, 1000):
        if i*j in mylist:
            mylist.remove(i*j)
        
a = int(input())
q = map(int, input().split())
q = [i for i in q if i in mylist]
print(len(q))
  • 입력조건을 활용해 범위에 해당하는 값 목록을 리스트로 만들어 해결

  • mylist.remove(i*j)을 통해 요소를 삭제하면 index는 삭제된 요소의 뒤에 있던 요소부터 1씩 앞당겨짐

profile
백엔드 개발자가 되고 싶어요(22.8.15~)

0개의 댓글