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

Digeut·2023년 3월 1일
0

프로그래머스

목록 보기
10/171

❔문제설명

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 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개의 댓글