https://school.programmers.co.kr/learn/courses/30/lessons/120846
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 설명]
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 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함수)
2) map, filter
앞서 배운 제너레이터(`generator`)는 이터레이터(`iterator`) 입니다. 다만 제너레이터 표현식 또는 `yield`키워드를 통해 생성한 이터레이터는 구분을 위해서…
wikidocs.net
def solution(n):
return len([i for i in range(2, n + 1) if not all(i % j for j in range(2, i))])