본문 바로가기
algorithm

[프로그래머스]합성수 찾기 - java , python

by skysline 2023. 3. 10.
반응형

`합성수찾기`

문제 설명

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

 

입출력 예


입출력 예 #1

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

입출력 예 #1

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

java code

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 1; i <= n; i++) {
            int cnt = 0;
            for (int j = 1; j <=i ; j++) {
                cnt += (i%j==0) ? 1:0;
            }
            answer += (cnt >= 3)? 1:0;
        }
        return answer;
    }
}

반복문 안에서 cnt를 선언하는 경우, cnt 변수는 반복문이 실행될 때마다 초기화됩니다. 이는 i가 변할 때마다 cnt가 다시 0으로 초기화되므로, 이전 i의 결과가 현재 i의 결과에 영향을 미치지 않습니다. 이 경우, cnt 변수의 값은 반복문 실행 중에만 유지됩니다.

하지만, 반복문 밖에서 cnt를 선언하는 경우, cnt 변수는 반복문이 종료된 후에도 그 값을 유지합니다. 이는 i가 변하더라도 cnt 변수가 초기화되지 않기 때문입니다. 이 경우, cnt 변수의 값은 반복문 실행이 끝난 후에도 유지되므로, 반복문 실행 후에 cnt 변수의 값을 확인할 수 있습니다.

따라서, 이 문제에서 cnt 변수는 반복문 안에서 선언하는 것이 적절합니다. 왜냐하면 cnt 변수는 각각의 i 값에 대한 약수의 개수를 세는 것이 목적이기 때문에, 각각의 i 값에 대해 새로운 cnt 변수를 선언하여 해당 i 값에 대한 약수 개수를 계산하는 것이 적절합니다.

python code

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

결과

반응형

댓글