문제 설명
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 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;
}
}
한 없이 작아지는... 나의 코드입니다ㅠㅠㅠ
'CodingTest' 카테고리의 다른 글
프로그래머스 - 공던지기 (JAVA) (0) | 2023.03.01 |
---|---|
프로그래머스 - k의 개수 (JAVA) (0) | 2023.02.28 |
프로그래머스 - 직각삼각형 출력하기 (JAVA) (0) | 2023.02.23 |
프로그래머스 - 주사위의 개수 (JAVA) (0) | 2023.02.20 |
프로그래머스 - 배열 원소의 길이 (JAVA) (0) | 2023.02.17 |