CodingTest

프로그래머스 - 합성수 찾기 (JAVA)

쩡선영 2023. 2. 24. 23:30

문제 설명


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

 

<제안사항>

1)  1 <= n <= 100

 

 

 

 

내가 직접 짠 코드


class Solution {
    public int solution(int n) {
        int answer = 0, num=1, cnt=0;
        for(int i=4; i<=n; i++){ //합성수는 4부터 있음
            while (true){
                if(i%num==0){
                    cnt++; //약수 개수 세기
                }
                num++; // 나눠질 수 
                //약수의 개수가 3개이거나 나눠지는 수가 i보다 크면 무한루프 탈출
                if(cnt==3){
                    cnt=0; num=1; answer++; //cnt와 num 초기화
                    break;
                }
                if(num>i) {
                    cnt=0; num=1; //cnt와 num 초기화
                    break;
                } 
            }
        }
        return answer;
    }
}

(설명은 주석 참고)

 

 

 

 

다른 코드


class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=4; i<n+1; i++){
            if(i%2==0) {
                answer++; // 4이상 짝수는 전부 합성수
                continue;
            }
            else{
                for(int k=3; k<i/2; k=k+2){
                    if(i%k==0){
                        answer++;
                        break;
                    }
                }
            }
        }
        return answer;
    }
}

 

한 없이 작아지는... 나의 코드입니다ㅠㅠㅠ