알고리즘 스터디 - 3주차 3

이강민·2024년 8월 5일
0

커널360

목록 보기
23/56
post-thumbnail

15965

  • 알고리즘 : 아리토스테네스의 체
  • 난이도 : 실버2

문제

15965

접근

  • 소수란? 2이상의 자연수 N이 1과 N을 제외하고 어떤 자연수로도 나누어 떨어지지 않을 때
  • K번째의 소수를 구하기
    • K의 최대 수 500000
    • 최소 500000 크기의 배열이 필요함

가정

  • 에라토스테네스의 체를 통해 소수를 구하면 될 것 같습니다.

풀어보기

package org.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) 	{
			Scanner scanner = new Scanner(System.in);
			int k = scanner.nextInt();
			boolean[] isPrime = eratosthenesChe();
			List<Integer> primes = new ArrayList<>();
			for(int i = 0; i<isPrime.length; i++){
				if(isPrime[i]){
					primes.add(i);
				}
			}
		System.out.println(primes.get(k-1));
	}
	public static boolean[] eratosthenesChe(){
		boolean[] isPrime = new boolean[10000001];
		Arrays.fill(isPrime, true);
		isPrime[0] = false;
		isPrime[1] = false;
		for(int p = 2; p * p <= 10000000; p++){
			if(isPrime[p]){
				for(int j = p * p; j <= 10000000; j += p){
					isPrime[j] = false;
				}
			}
		}

		return isPrime;
	}
}

시행착오

  • 배열의 크기를 500000으로 잡아서 500000번째 소수를 찾지 못하였습니다.
  • Long 타입으로 적용해야 되는 지 알고 잘 못 적용하였습니다.
  • 500000번째 K의 수가 들어있을 배열의 위치를 찾는 것이 중요했습니다.

참고자료

profile
AllTimeDevelop

0개의 댓글

관련 채용 정보