본문 바로가기
알고리즘/프로그래머스(JAVA)

[JAVA-120846] 합성수 찾기

by 썬키 2023. 1. 18.
 

프로그래머스

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

programmers.co.kr

링크를 클릭하면 해당 문제로 이동합니다.

 

 

출처 - 프로그래머스

 


 

1. 접근하기

나는 for문을 3개 사용해서 매개변수로 주어진 n 이하의 수들의 약수를 구한다음 약수의 갯수가 3개 이상이면

answer의 값이 증가하도록 코드를 짰다.

 

TO-DO
1) n 이하의 수들의 약수를 구하기 위해 int 타입 변수 num의 값을 1로 초기화하고
약수 구하는 과정이 끝나면 num을 증가 시킨다.
2) 약수를 구한 다음에는 약수들을 list에 넣는다.
이 때, 약수의 갯수가 3개 이상이면 answer의 값을 증가 시킨다. 

 

2. 풀이

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int solution(int n) {
        int answer = 0;
        int num = 1;
       
        for(int i = 0; i < n; i++) {
            List<Integer> list = new ArrayList<>();
            for(int j = 1; j <= num; j++) {
                for(int k = 1; k <= num; k++) {
                    if(j*k == num) {
                        list.add(j);
                        if(!(list.contains(j))) {
                            list.add(k);
                        } 
                    }
                }
            }
            if(list.size() > 2) {
                answer++;
            }           
            num++;
        }
        return answer;
    }
}

 

3. 결과

 

4. 리뷰

사실 난 수포자라 이런 수학적 사고를 0.1%라도 필요로 하는 문제를 만날 때마다 머리가 아프다ㅎ...

문제를 풀고 나서 다른 사람들의 풀이를 보니까 4 이상의 짝수들은 모두 합성수라고 한다.

그렇다면 굳이 1 ~ 3 까지의 약수들은 구할 필요가 없었다.

댓글