소수를 찾는 방법 중 가장 효율적인 방법으로 유명한 에라스토테네스 체를 알게되었다.
코드는 아래와 같다.
def sieve(max_num, min_num):
primes = [True] * max_num # 주어진 숫자만큼 배열 생성 (우선은 임의로 True (=소수)로 저장)
m = int(max_num ** 0.5) # n의 제곱근를 이용하여 작은 수들만으로도 소수을 판별
for i in range(2, m + 1): # 1과 2는 이미 소수이므로 3부터 주어진 숫자까지 소수 판별 시작
if primes[i]:
for j in range(i + i, max_num, i): # i의 배수가 되는 값들은 False로 변경
primes[j] = False
return [i for i in range(min_num + 1, max_num) if primes[i] == True] #소수들 중 매개변수로 전달한 max_num과 min_num 사이만 반환
주어진 값만큼 소수를 나타내는 True값으로 배열을 생성하고
2,3,5,7을 제외한 2,3,5,7의 배수들을 False값을 전환하여 나중에 True로 남아있는 소수만 반환해주는 알고리즘이다.
백준을 시작하며 파이썬으로 다양한 Input값을 받는 방법을 배웠다.
a,b = map(int, input().split())
한줄로 입력받은 두개의 값을 공백을 기준으로 구분후 int형으로 변환해줌
input().split()
한줄을 입력은 문자열을 공백으로 구분 후 list로 반환
map(int, input().split())
한줄을 입력받은 문자열을 공백으로 구분하여 나눈 후 모든 원소들을 int 형으로 바꾼 list를 반환
sys.stdin.readline()
개행문자(줄 바꿈 문자)를 공백없이 입력받을 수 있음
보통 오른쪽이나 왼쪽에 공백이 발생하는데 이럴 경우 .rstrip() 이나 .lstrip() 사용 가능
만약 input 개수와 상관없이 계속 데이터를 입력받고 싶다면 while를 사용할 수 있음
하지만, break 조건이 항상 같이 있어야함
오늘 알고리즘 스터디 모임을 새로 시작했다. 다행히 좋은 팀원분들을 만난 것 같다.
스터디를 진행하는 동안 알고리즘 마라톤을 안전히 완수할 수 있게 서로 부족한 부분을 채워주며 탄탄한 코딩 속근육을 기를 수 있으면 좋겠다.
아무래도 알고리즘 자체가 난이도도 높고 익숙하지않다보니 집중하기 어려운거 같다.
그래서 이번주는 procrastination 잦아졌는데.. 다시 마음잡고 공부에 물두할 수 있으면 좋겠다.