https://school.programmers.co.kr/learn/courses/30/lessons/120846
[문제 설명]
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 100
[나의 풀이]
def solution(n):
answer = 0
a = []
for i in range(1,n+1):
a.append(num) for num in range(1,i+1) if i % num == 0
if len(a) >= 3:
answer += 1
a = []
return answer
ㄴ처음에 짠 엉터리 코드
def solution(n):
answer = 0
for i in range(1, n+1):
a = [] # 각 수에 대해 새로운 리스트 초기화
for num in range(1, i+1):
if i % num == 0:
a.append(num)
if len(a) >= 3: # 약수가 3개 이상이면 합성수
answer += 1
return answer
ㄴ챗지피티가 수정도와줌
[다른 풀이]
def solution(n):
output = 0
for i in range(4, n + 1):
for j in range(2, int(i ** 0.5) + 1):
if i % j == 0:
output += 1
break
return output
def get_divisors(n):
return list(filter(lambda v: n % v ==0, range(1, n+1)))
def solution(n):
return len(list(filter(lambda v: len(get_divisors(v)) >= 3, range(1, n+1))))
-참고(map함수,filter함수)
def solution(n):
return len([i for i in range(2, n + 1) if not all(i % j for j in range(2, i))])