본문 바로가기
카테고리 없음

[Lv.0] 합성수 찾기

by dantriss 2023. 3. 3.


https://school.programmers.co.kr/learn/courses/30/lessons/120846

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

생각할 시간이 좀 필요한 문제였다.

이중for문을 사용할 땐 안에 어떠한걸 먼저 넣어야 하는지 생각해보면 된다..

 

우선 특정 자연수의 약수를 구하면 된다.

자연수 10을 예로 자연수 10을 1부터 10까지 나눠서 몫이 0이 되는 숫자들은 10에 대한 약수라고 할 수 있다.

약수가 존재할 때마다 divider에 1씩 추가해주면 특정 자연수의 약수의 개수를 알 수 있다.

이제 이걸 자연수 n까지 각각 몇개의 약수를 가지고 있는지 보면 된다.

n은 1부터 100까지라는 제한사항이 있으니 밖에 for문에 1부터 n까지 반복해본다.

 

엇 그런데 약수의 개수가 좀 이상하다?

여기서 i가 1에서 2로 바뀔때 2에서 3으로 바뀔때마다 divider가 계속 누적이된다. 

그러므로 divider = 0;을 넣어 i가 다음 숫자로 넘어갈 때마다 0으로 초기화 해주자.

i가 다음숫자로 넘어갈 때 마다 divider가 0으로 초기화되어서 자연수 i의 약수개수들을 알 수 있다.

이제 약수의 개수가 3개인 합성수를 찾아야 하므로 밖에 for에 divider가 3이상일 때 answer 에 1씩 더해주면 자연수 n이하의 자연수중에서 약수를 3개이상 가진 합성수를 구할 수 있다.

class Solution {
    public int solution(int n) {
        int answer = 0;
        int divider = 0;
        
        for(int i = 1; i<=n; i++){

                for(int j =1; j<=i; j++){
                    if(i%j==0){
                        divider +=1;
                    }
                } 
            
            if(divider>=3){ 
                answer +=1;
            }
            divider = 0;
        }

        return answer;
    }
}

댓글