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;
}
}
댓글