본문 바로가기

Algorithm/programmers(python)

[programmers] 합성수 찾기, 120846

반응형

문제 설명

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

더보기

제한사항

- 1 ≤ n ≤ 100

입출력 예

입출력 예 설명

입출력 예 #1

- 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.

 

입출력 예 #2

- 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.

풀이 #1

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

풀이 #1 설명

- 자연수 중 약수가 세개 이상인 가장 작은 수 = 4. 따라서 범위를 4부터 시작

- 두번째 반복문으로 i의 약수가 세개 이상인지 확인. 3개 이상이라면 answer에 +1

 

풀이 #2

def solution(n):
    answer = 0
    for i in range(4, n + 1):
        for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                answer += 1
                break
    return answer

 

풀이 #2 설명

- 1과 본인을 제외한 하나의 약수만 더 있다면 합성수인 것을 이용한 방법

- range(2, int(i**0.5) +1 ) : 약수는 보통 중간에서 대칭모양인 것을 이용하여, 처음 절반만 for문이 돌아가도록 함

- 1과 본인을 제외한 1개의 약수만 더 있다면 합성수이므로, 약수 하나가 나오면 answer에 +1 후 break

반응형