프로그래머스/파이썬_입문

합성수 찾기

싱싱한복초이 2024. 10. 17. 20:11

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함수)

https://wikidocs.net/22803

 

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))])

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

모음 제거  (0) 2024.10.20
주사위의 개수  (0) 2024.10.18
팩토리얼  (0) 2024.10.16
배열 회전시키기  (0) 2024.10.15
append(), +=, join()  (0) 2024.10.14