미운 오리 새끼의 우아한 개발자되기

[Programmers] Lv1. 소수 찾기 (feat. 에라토스테네스의 체) 본문

Coding Test/오답노트

[Programmers] Lv1. 소수 찾기 (feat. 에라토스테네스의 체)

Serina_Heo 2022. 1. 24. 14:58

https://programmers.co.kr/learn/courses/30/lessons/12921

 

코딩테스트 연습 - 소수 찾기

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상

programmers.co.kr

 

코딩테스트 문제 풀이 과정

1. 문제를 파악한다.

2. 열심히 생각한다.

3. 코드로 쓴다.

 

이번 문제 풀이 Key Point

1. 소수에 대한 개념.

2. 단순히 for 문 여러번 돌리는 코드를 짜면 시간 테스트 통과 x.

3. 에라토스테네스의 체에 대해 알고있으면 문제 풀이가 더 수월함.

 

에라토스테네스의 체

import java.util.*;

public class Erastos {
    public static void main(String[] args){

    ArrayList<Boolean> primeList;

    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();

    if(n<=1) return;

    primeList = new ArrayList<Boolean>(n+1);
    primeList.add(false);
    primeList.add(false);

    // 2 ~ n 까지 소수로 설정
    for(int i=0; i<=n; i++){
        primeList.add(i, true);
    }

    // 2 ~ i*i <=n
    for(int i=0; (i*i) <= n; i++){
        if(primeList.get(i)){
            // 각각의 배수들을 지운다
            for(int j=i*i; j<=n; j+=i){
                primeList.set(j, false);
            }
        }
    }

    StringBuffer sb = new StringBuffer();
    sb.append("{");

    for(int i=0; i<=n; i++){
        if(primeList.get(i) == true){
            sb.append(i);
            sb.append(",");
        }
    }
    sb.setCharAt(sb.length()-1, '}');

    System.out.println(sb.toString());

    }
}

 

'Coding Test > 오답노트' 카테고리의 다른 글

[백준 #1157] 단어공부 (java)  (0) 2022.03.07
[백준 #2577] 숫자의 개수 (java)  (0) 2022.03.03