Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- 코딩테스트
 - pandas profiling
 - oracle
 - Inventory Optimization
 - MySQL
 - SKU Consolidation
 - ABC Analysis
 - HackerRank
 - 피그마인디언
 - 웨어하우스 보관 최적화
 - ModelCheckPoint
 - 코딩테스트연습
 - 딥러닝
 - kaggle
 - 당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까
 - 데이터분석
 - leetcode
 - SQL
 - TensorFlowGPU
 - 파이썬
 - Gaimification
 - eda
 - Labor Management System
 - forecast
 - ProfileReport
 - 프로그래머스
 - MS SQL Server
 - Product Demand
 - tensorflow
 - 신경쓰기의 기술
 
													Archives
													
											
												
												- Today
 
- Total
 
오늘도 배운다
소수 찾기 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 본문
문제
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.)

제출답안
def solution(n):
    def is_primeN(n):
        """
        소수 탐지 함수
        @param n: int
        return 0 or 1
        """
        output = 1 # 기본값(True)
        for num in range(2, int(n**0.5)+1):
            # 1과 주어준 수의 제곱근 사이에 약수가 하나라도 있으면 소수가 아니다.
            if not n % num: 
                output = 0
                break
        return output
    
    # 2 이상의 홀수만 대상으로 체크 (2 이상의 짝수는 소수가 아니다)
    ls_odd = [num for num in range(2, n+1) if num%2]
    
    # 솟수 점검범위: 2, 그 이상의 홀수
    answer = 1 + sum([1 for num in ls_odd if is_primeN(num)])
    return answer
다른사람 풀이
에라토스테네스의 체라는 소수를 찾는 방법이 있었다
그리고 성능이 상상을 초월했다.
해당 코드는 아래와 같다.
def solution(n):
    num=set(range(2,n+1))
    for i in range(2,n+1):
        if i in num:
            num-=set(range(2*i,n+1,i))
    return len(num)


다른 사람의 풀이를 개선
위 코드에서 숫자를 확인하는 경우의 수를 줄이는 것으로 마무리지었다.
추후에, 더 개선시켜보는 것으로
아래가 최종 코드와 그 결과물이다
def solution(n):
    
    num= set(range(3,n+1, 2))
    
    for odd in range(3,n+1, 2):
        if odd in num:
            num-=set(range(2*odd,n+1,odd))
    
    answer = len(num)+1
    return answer

문제 바로가기
728x90
    
    
  '코딩테스트연습(파이썬)' 카테고리의 다른 글
| 옹알이 (2) / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 (0) | 2022.12.12 | 
|---|---|
| 이상한 문자 만들기 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 (0) | 2022.12.11 | 
| 2016년 / 프로그래머스, 파이썬 / 코딩테스트 연습 연습문제 (0) | 2022.12.06 | 
| 시저 암호 / 프로그래머스, 파이썬 코딩테스트 연습 연습문제 (0) | 2022.12.06 | 
| 완주하지 못한 선수 / 프로그래머스, 파이썬 코딩테스트 연습 해시 (0) | 2022.12.05 | 
			  Comments