[프로그래머스] 소수 찾기

이찬혁·2024년 4월 22일

알고리즘

목록 보기
48/72

프로그래머스 Lv1 - 소수 찾기 문제

프로그래머스 코딩테스트 문제 중 레벨 1 소수 찾기 문제를 풀이했다.
지난번에 공부했던 소수 찾기 알고리즘 방법 중 하나인 에라토스테네스의 체 알고리즘을 잊지 않기 위해 요즘 코딩 테스트 문제 중 소수 관련 문제가 나오면 항상 풀어보는 편이다. 문제 제목대로 주어진 1 ~ n 범위내에 있는 소수만을 찾는 문제라 2분(코드 작성 시간)만에 바로 풀었다.

FindPrimeNum.java

package com.example.Programmers.Lv1;

/**
 * 프로그래머스 Lv1 - 소수 찾기 문제
 * 에라토스테네스의 체 알고리즘으로 풀이
 */
public class FindPrimeNum {
    public int solution(int n) {
        int answer = 0;
        int[] arr = new int[n + 1];

        // 소수 배열 초기화
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
        }

        // 소수가 아닌 수에 0 삽입
        for (int i = 2; i <= Math.sqrt(arr.length); i++) {
            if (arr[i] == 0) {
                continue;
            }
            for (int j = i + i; j < arr.length; j = j + i) {
                arr[j] = 0;
            }
        }

        // 소수이면(배열의 요소가 0이 아니면) 정답 변수에 +1
        for (int i = 2; i < arr.length; i++) {
            if (arr[i] != 0) {
                answer++;
            }
        }
        return answer;
    }
}

FindPrimeNumTest.java

package com.example.Programmers.Lv1;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class FindPrimeNumTest {
    @Test
    public void testFindPrimeNum() {
        FindPrimeNum f = new FindPrimeNum();

        int result1 = f.solution(10);
        int result2 = f.solution(5);

        assertEquals(4, result1);
        assertEquals(3, result2);
    }
}
profile
나의 개발로그

0개의 댓글