본문 바로가기
algorithm/Programmers

[JAVA] 합성수 찾기

by 이쟝 2023. 1. 23.

문제 설명

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


제한사항
  • 1 ≤ n ≤ 100

입출력 예nresult
10 5
15 8

입출력 예 설명

입출력 예 #1

  • 10 이하 합성수는 4, 6, 8, 9, 10 로 5개입니다. 따라서 5를 return합니다.

입출력 예 #1

  • 15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.

1. 기본 for문

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=1; i<=n;i++) {
            int count = 0;
            for(int j=1; j<=i;j++) {
               count += (i%j == 0) ? 1 : 0;
           }
            answer += (count >= 3) ? 1 : 0;
        }
        return answer;
    }
}

1. 약수의 개수를 count 하고, 나누어 떨어지면 약수이기 때문에 count ++ 하고 (count는 for문 돌아갈 때마다 초기화)

2. count가 3개 이상이면 합성수이기 때문에 answer ++  

 

for(int j=1; j<=i; j++) 이부분을 => for(int j=1; j<=n; j++) 이렇게 해도 무방하다 

각 자릿수의 약수를 구하고 그 약수의 개수가 3개 이상이면 return 할 수도 있는데 그렇게 하면 시간이 더 걸린다. (for문을 세번 돌려야 해서..)

'algorithm > Programmers' 카테고리의 다른 글

[JAVA] 문자열 정렬하기(1)  (0) 2023.01.24
[JAVA] 팩토리얼  (0) 2023.01.23
[JAVA] 2차원으로 만들기  (0) 2023.01.20
[JAVA] 배열 회전시키기  (0) 2023.01.20
[JAVA] 점의 위치 구하기  (0) 2023.01.19