level 2. 소수 찾기

|

문제출처

문제

numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다.

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.)

10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환

풀이

def numberOfPrime(n):
    num_list = list(range(n+1))
    prime_list = []
    for num in num_list:
        check = 0
        for i in list(range(1,num+1)):
            if num % i == 0:
                check += 1
        if check == 2:
            prime_list.append(num)
    return len(prime_list)



# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(numberOfPrime(10))

풀이 과정

  • 1부터 n 사이의 숫자를 리스트로 만든다. (list, range 함수)
  • 리스트의 각 요소를 돌면서 (반복문) 소수인지 확인한다.
  • 어떻게 소수인지 확인하지?
    • 소수는 1부터 자신까지의 수로 나누어 나머지가 0인 수가 2개만 존재한다. (range, 반복문)

다른사람 풀이


# 소수인지 판단
def is_prime(n):
    return all([(n%j) for j in range(2, int(n**0.5)+1)]) and n>1 # bool 값 리턴

# 소수의 갯수 리턴
def numberOfPrime(n):
    return [is_prime(x) for x in range(1, n+1)].count(True)  
  # return len(list(filter(is_prime, range(1, n+1))))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(numberOfPrime(10))

배운점

  • all() 내장함수 : all(x)은 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며, 이 x가 모두 참이면 True, 거짓이 하나라도 있으면 False를 리턴한다.
  • (※ 반복 가능한 자료형이란 for문으로 그 값을 출력할 수 있는 것을 의미한다. 리스트, 튜플, 문자열, 딕셔너리, 집합 등이 있다.)
  • .count(x) : 리스트, 문자열, 튜플 등 iterable 자료형 안의 x 요소의 갯수를 리턴한다.