Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions INSEA-99/week08/2960_에라토스테네스의_체.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# pypy3
# 시간(ms) : 92
# 공간(KB) : 109544

import sys
input = sys.stdin.readline

n, K = map(int, input().strip().split())

sieve = [True] * (n + 1)
sieve[0] = sieve[1] = False

def find_kth_removed(n, K) :
k = 0
for i in range(2, n + 1): # 소수를 포함하여 지워지는 수를 확인해야하므로 n까지 탐색
if sieve[i]: # 소수라면 본인과 배수 제거
for j in range(i, n + 1, i):
if sieve[j]:
sieve[j] = False
k +=1
if k == K: return j
print(find_kth_removed(n, K))
37 changes: 37 additions & 0 deletions INSEA-99/week08/3020_개똥벌레.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# pypy3
# 시간(ms) : 152
# 공간(KB) : 118540
#
# 공유 :
# - gpt가 파이썬은 인덱스를 음수로 반복적으로 접근하면 내부적으로 인덱스 변환을 계속 해야 하므로 느리다함
# 이 문제 기준으로는 8ms 차이라서 크게 신경 안써도 될듯 (백만 단위 이상 인덱싱에서 3~5% 정도 느리다고)

import sys
input = sys.stdin.readline

n, h = map(int, input().strip().split())

top = [0] * (h+1) # 종유석
bottom = [0] * (h+1) # 석순

for _ in range(n//2) : # 종유석, 석순 각각 같은 길이 카운팅
bottom[int(input())] += 1
top[-int(input())] += 1

for i in range(1, h+1) : # 종유석, 석순 각각 누적합을 통해 구간에 따른 hit 구하기
top[i] += top[i-1]
bottom[-(i+1)] += bottom[-i]

min_hit = n # 최소 hit
min_hit_cnt = 1 # 최소 hit 개수
for i in range(1, h+1) :
hit = top[i] + bottom[i] # 종유석, 석순 합쳐서 최종 hit 구하기
if min_hit > hit :
min_hit = hit
min_hit_cnt = 1
elif min_hit == hit :
min_hit_cnt += 1

print(min_hit, min_hit_cnt)


28 changes: 28 additions & 0 deletions INSEA-99/week08/6588_골드바흐의_추측.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# pypy3
# 시간(ms) : 316
# 공간(KB) : 119244

import sys
input = sys.stdin.readline
MAX = 1_000_000

def goldbach_conjecture_check(n) :
for i in range(3, n - 2) : # 홀수 소수 합이 n이 되는지 확인
if sieve[i] and sieve[n-i]:
return f"{n} = {i} + {n-i}"
return "Goldbach's conjecture is wrong."

# MAX 값 기준 에라토스테네스의 체 생성
sieve = [True] * (MAX + 1)
sieve[0] = sieve[1] = False

for i in range(2, int(MAX ** 0.5) + 1):
if sieve[i]: # 소수라면 배수 제거
for j in range(i * i, MAX + 1, i): # i*i보다 작은 배수는 중복 처리이기 때문에 i*i 부터 확인
sieve[j] = False

# 골드바흐의 추측 검증
while True :
n = int(input())
if n == 0 : break
print(goldbach_conjecture_check(n))