본문 바로가기
코딩테스트 연습

합성수 찾기

by 신재은👩🏼‍💻 2024. 4. 18.

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

제한사항
1 ≤ n ≤ 100


입출력 예
n result
10 5
15 8


import java.util.ArrayList;

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        // 합성수를 어떻게 찾나?
        // n 이하의 수를 순회해 보자.
        for(int i=2; i<=n; i++) {
            ArrayList<Integer> arrList = new ArrayList<Integer>();
            // 약수를 찾아 보자.
            for(int j=1; j<=i; j++) {
                if (i % j == 0) {
                    arrList.add(j);
                    if (arrList.size() >= 3) {
                        answer+=1;
                        break;
                    } 
                }       
            }
        }
        
        return answer;
    }
}


아, 진짜 웃긴다.

 

처음에 

 

import java.util.ArrayList;

class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> arrList = new ArrayList<Integer>();
        
        // 합성수를 어떻게 찾나?
        // n 이하의 수를 순회해 보자.
        for(int i=2; i<=n; i++) {
            // 약수를 찾아 보자.
            for(int j=1; j<=i; j++) {
                if (i % j == 0 && arrList.size() < 3) {
                    arrList.add(j);
                } else if(arrList.size() >= 3) {
                    answer+=1;
                    arrList.clear();
                    break;
                }        
            }
        }
        
        return answer;
    }
}

 

이렇게 짰었다.

그런데 테스트 실패 케이스가 계속 나오는 것이었다.

무엇이 문젤까?

나는 알 수가 없어서 다른 사람한테 물어보니

'약수가 2개인 수는 필터링 안 되지 않니?'라고 해서 보니...

그랬던 것이었다.

 

그래서 맨 위의 코드로 수정하고 패스~

 

다른 사람의 코드를 보니

이번에도 역시 희표좌...

 

import java.util.stream.IntStream;

class Solution {
    public int solution(int n) {
        return (int) IntStream.rangeClosed(1, n).filter(i -> (int) IntStream.rangeClosed(1, i).filter(i2 -> i % i2 == 0).count() > 2).count();
    }
}

 

깨끗하다.

나도 생각은 이렇게 했는데(생각한 로직이 위와 같은 거 같은데)

시작을 2부터 해서...

(시작을 2부터 한 것도 말이 안 된다. 하려면 1부터 하든가 4부터 해야지 왜 2부터 했을까. 나도 알 수 없다...)

'코딩테스트 연습' 카테고리의 다른 글

세로 읽기  (0) 2024.04.18
369게임  (0) 2024.04.18
피자 나눠 먹기 (2)  (0) 2024.04.18
문자열 정렬하기 (2)  (0) 2024.04.18
숫자 찾기  (0) 2024.04.18