새소식

Programmers Coding Test/Java

[프로그래머스 120846] Java - 코딩테스트 입문 / 합성수 찾기

  • -

 

 

합성수 찾기

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120846

 

프로그래머스

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

programmers.co.kr

 

 

 

1)  문제

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

 

 

 

2)  예시

 

 

Result Table
n result
10 5
15 8

 

 

 

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

 

입출력 예 #2
15 이하 합성수는 4, 6, 8, 9, 10, 12, 14, 15 로 8개입니다. 따라서 8을 return합니다.≤ n ≤ 100

 

 

 

 

 

 

3)  풀이

 

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 정수 n을 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int로 합니다.

●   public int solution(int n) {

 

 

 

 

3. 제한사항을 확인하고, 만족하지 못할 경우 예외처리합니다.

●     if(n < 1 || n > 100){
            throw new IllegalArgumentException("n은 1 이상 100 이하입니다.");
       }

 

 

3. 정답으로 사용될 변수 answer를 생성하고 초기화해줍니다.

●   int answer = 0;

 

 

 

4. 우선 클래스 내에 정수 num에 대한 약수의 개수를 구하는 메소드(countDivisors)를 만들어줍니다.

for반복문을 통해 정수 num까지 순회하며, i로 num을 나눈 나머지가 0인 값은 모두 약수에 해당하게 됩니다.

약수에 해당할 때마다 count 값을 1씩 증가시키면 이게 약수의 개수가 됩니다.

  private int countDivisors(int num) {
        int count = 0;
        for (int i = 1; i <= num; i++) {
            if (num % i == 0) {
                count++;
            }
        }
        return count;
    }

 

 

 

 

 

5. for 반복문을 통해 아까 만든 약수의 개수를 만드는 메소드에 num값을 대입해줍니다.

약수의 개수가 3이상이라면 answer값을 1씩 증가시키고, 최종적으로 answer값을 반환해줍니다.

 for (int i = 1; i <= n; i++) {
            if (countDivisors(i) >= 3) {
                answer++;
            }
        }
        
        return answer;
    }

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int n) {
        if(n < 1 || n > 100){
            throw new IllegalArgumentException("n은 1 이상 100 이하입니다.");
        }
        
        
        int answer = 0;
        
        for (int i = 1; i <= n; i++) {
            if (countDivisors(i) >= 3) {
                answer++;
            }
        }
        
        return answer;
    }

    private int countDivisors(int num) {
        int count = 0;
        for (int i = 1; i <= num; i++) {
            if (num % i == 0) {
                count++;
            }
        }
        return count;
    }
}

 

 

 

 

 

 

 

5)  느낀점

약수를 계산하는 메소드를 만들고 그것을 활용하는 문제를 풀었던 경험이 있어 이전보다는 쉽게 풀 수 있었습니다.

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.