Python/코딩테스트

[프로그래머스] 합성수 찾기

edoyyoy 2023. 5. 31. 15:22

난이도 : 코딩테스트 입문 (Lv.0) 

정답률 : 85%

문제 : [프로그래머스] 합성수 찾기

 

 

< 나의 풀이 >

def solution(n):
    answer = 0
    for i in range(4, n+1):
        cnt = 0
        for j in range(1, i+1):
            if i%j == 0:
                cnt += 1
        if cnt >= 3:
            answer += 1
    return answer

▶ 우선 합성수는 4부터 시작한다.

    (1, 2, 3의 경우는 약수가 1과 자신 뿐이기 때문에 총 2개 존재하기 때문이다.)

    따라서 4부터 n까지 기본 범위를 설정 한 후 (for i in range(4, n+1))

    해당하는 값 (i)의 약수의 개수(cnt)를 구해준다. 

    구한 개수의 값이 3 이상인 경우 답을 체크해준다. (answer += 1)

    

 

< 다른 사람의 풀이 >

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

▶똑같이 합성수는 4 이상부터 시작하지만 

    약수의 개수를 세줄 때 제곱근까지만 해준다. 

    (약수는 대칭으로 이루어져있기 때문에 N**0.5 * N**0.5 = N으로 가운데 값은 제곱근임을 알 수 있다.)

    또한, 1과 자기 자신 그 외의 단 한 개의 약수만 존재해도 3개 이상인 합성수이므로

    꼭 필요한 경우만 카운팅해주기 때문에 코드가 효율적이다.

 

 

같은 문제라도 필요한 값들만 카운팅하면 시간적으로 효율을 얻을 수 있기 때문에 참고하면 좋을 것 같다~