프로그래머스 : 합성수 찾기

Digeut·2023년 3월 1일
0

프로그래머스

목록 보기
10/164

❔문제설명

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

⚠️제한사항

1 ≤ n ≤ 100

🤔아이디어

n이하의 숫자에서 약수의 갯수를 세는 변수를 만들어 값을 넣어준 다음
그 값이 3이상인 약수갯수변수를 answer에 넣어주면 안되나?

❌틀린코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        int divisor = 0; //약수개수
        
        for (int i = 1 ; i <= n ; i++){ //약수갯수 세기
            if(n%i == 0){
                divisor++;
            }
        }
        
        for (int j = 1 ; j <=n ; j++){
            if(divisor >=3){
                answer++;
            }
        }
        
        
        return answer;
    }
}

🙄오류

뭔가 전혀 약수의 갯수가 구해지지 않은 느낌...

💡코드풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 1 ; i <= n ; i++){
            int count = 0; //이 변수 설정이 for문 밖에 있으면
            			   //값이 구해지지 않던데 왜일까...
            for(int j = 1 ; j <= i ; j++){
                if(i % j == 0){
                    count ++;
                } 
            }
            if(count >= 3){
                answer++;
            } 
        }
        return answer;
    }
}

약수를 구하는 for문을 이중으로 사용해야 했다.
i는 1부터 n까지의 수를 반복문을 이용해 하나씩 가져와서
i를 j로 나눴을때 나머지가 0이면 j가 i의 약수가 되므로
count 변수에 대입해주었다!

profile
개발자가 될 거야!

0개의 댓글