level 2. 소수 찾기
17 Mar 2017 | 알고리즘 프로그래밍문제
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 요소의 갯수를 리턴한다.