중학교 1학년 교과과정의 시작은 소수를 찾는 것부터 시작합니다. 에라토스네스의 체를 이용하여 소수를 판별하는 법을 배우면서 2, 3, 5, 7, 11, ...로 이어지는 소수의 수열을 배웁니다. Show 2부터 소수가 될 자격이 있는데, 6과 같은 수는 1, 2, 3, 6을 양의 약수로 갖기 때문에 소수가 아닙니다. 6을 예로 들어서 설명하면, 6을 2부터 자신보다 1이 작은 수들인 [2, 3, 4, 5]로 나누어 보면, 나머지는 [0, 0, 2, 1]이 됩니다. 결국, 자연수 6은 [1, 6] 이외에도 [2, 3]으로 나누어도 나머지가 0이 되기 때문에 소수가 아닙니다. 파이썬으로 소수를 판별하는 코드를 작성해 보겠습니다.
파이썬 코드를 실행하고 number로 20과 17을 입력하면, 20은 소수가 아니고 17은 소수라고 판별합니다. 오류 없이 잘 작성된 것 같습니다. Python으로 N까지의 소수 구하기 최적화N까지의 소수를 모두 구하는 문제는 알고리즘 풀이 사이트 빈출 유형일 뿐만 아니라, 기업체에서 가볍게 보는 라이브 코딩이나 손코딩 문제로 매우 자주 출제된다. 그 이유는, 난이도 자체는 쉽지만 최적화 할 수 있는 여지가 굉장히 많기 때문이다. 대표적인 손코딩/라이브코딩 시나리오는 아래와 같다.1. for문으로 한번 짜보실래요? 2. 지금 코드의 시간복잡도 설명해보실래요? 3. for문의 연산 수를 줄일 수 있는 방법이 있을까요? 4. 이 보다도 더 줄일 수 있는 방법이 있을까요? 시나리오를 따라서 한번 문제를 풀어보자! Req1) 단순 반복문으로 짜보실래요?
Req2) For문 연산 수를 줄여보실래요?
Req3) 그럼 실행시간을 여기서 더 줄일 수 있는 방법이 있을까요?
100,000까지의 소수 구하기 실행 시간 비교실제로 최적화가 효과가 있었는지, 실험을 진행해보자. 1부터 100,000까지의 소수를 위의 세가지 방식으로 구해보고 걸린 시간을 측정해봤다.
결과
|