백준 1929번

Dongwon Ahn·2020년 7월 30일
0

알고리즘 공부

목록 보기
2/8

문제

문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

예제 입력 1
3 16

예제 출력 1
3
5
7
11
13

코드

## https://www.acmicpc.net/problem/1929
import math

num_one, num_two = map(int, input().split(' '))


def check_decimal(num):
    if num == 1:
        return False
    n = int(math.sqrt(num))
    for i in range(2, n + 1):
        if num % i == 0:
            return False
    return num


for num in range(num_one, num_two+1):
    if check_decimal(num):
        print(num)

생각 🧐

맨 처음 문제를 접근할 때 단순 소수문제라고 생각했습니다.
1,000,000 까지 체크를 하다보니깐 시간초과 발생했습니다.
그래서 sqrt함수를 사용해서 제곱근까지 낮춰봤습니다.
그래서 시간초과 발생하더라고요...
그래서 함수로 빼고 한번이라도 나눠지면 바로 return하게 했더니 성공했습니다.

알고리즘 공부를 거의 한 적이 없어서 단순하게 되기만 하면 되는거 아니야 라는 생각으로 접근했는데 시간이나 여러 부분으로 좀 더 고민하고 코드를 짜야될꺼 같습니다.

profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.

0개의 댓글