From b223abe55dffa21899f8253267f4cc3d9d9a01e6 Mon Sep 17 00:00:00 2001 From: jaykxo Date: Wed, 5 Nov 2025 22:28:27 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Solved:=202960=20=EC=97=90=EB=9D=BC?= =?UTF-8?q?=ED=86=A0=EC=8A=A4=ED=85=8C=EB=84=A4=EC=8A=A4=EC=9D=98=20?= =?UTF-8?q?=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\212\244\354\235\230_\354\262\264.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "jaykxo/week08/2960_\354\227\220\353\235\274\355\206\240\354\212\244\355\205\214\353\204\244\354\212\244\354\235\230_\354\262\264.py" diff --git "a/jaykxo/week08/2960_\354\227\220\353\235\274\355\206\240\354\212\244\355\205\214\353\204\244\354\212\244\354\235\230_\354\262\264.py" "b/jaykxo/week08/2960_\354\227\220\353\235\274\355\206\240\354\212\244\355\205\214\353\204\244\354\212\244\354\235\230_\354\262\264.py" new file mode 100644 index 0000000..8e1774f --- /dev/null +++ "b/jaykxo/week08/2960_\354\227\220\353\235\274\355\206\240\354\212\244\355\205\214\353\204\244\354\212\244\354\235\230_\354\262\264.py" @@ -0,0 +1,24 @@ +# 2960 에라토스테네스의 체 +# Python3, 메모리: 32412 KB, 시간: 32 ms +# PyPy3, 메모리: 109544 KB, 시간: 88 ms + +import sys +input = sys.stdin.readline + +N, K = map(int, input().split()) + +prime = [True] * (N + 1) +cnt = 0 + +for i in range(2, N + 1): + + # 아직 지우지 않은 수 중 가장 작은 수를 찾는다 → 이 수가 P이다 (소수) + if prime[i]: + for j in range(i, N + 1, i): + if prime[j]: + # 아직 지우지 않은 P의 배수를 크기 순서대로 지운다 + prime[j] = False + cnt += 1 + if cnt == K: # K번째로 지워진 수를 찾으면 출력 + print(j) + raise SystemExit From 8ac30d395e01fe07a77cc6786dd995dd5fe1f6dc Mon Sep 17 00:00:00 2001 From: jaykxo Date: Wed, 5 Nov 2025 22:37:21 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Solved:=206588=20=EA=B3=A8=EB=93=9C?= =?UTF-8?q?=EB=B0=94=ED=9D=90=EC=9D=98=20=EC=B6=94=EC=B8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\354\235\230_\354\266\224\354\270\241.py" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "jaykxo/week08/6588_\352\263\250\353\223\234\353\260\224\355\235\220\354\235\230_\354\266\224\354\270\241.py" diff --git "a/jaykxo/week08/6588_\352\263\250\353\223\234\353\260\224\355\235\220\354\235\230_\354\266\224\354\270\241.py" "b/jaykxo/week08/6588_\352\263\250\353\223\234\353\260\224\355\235\220\354\235\230_\354\266\224\354\270\241.py" new file mode 100644 index 0000000..be29f0f --- /dev/null +++ "b/jaykxo/week08/6588_\352\263\250\353\223\234\353\260\224\355\235\220\354\235\230_\354\266\224\354\270\241.py" @@ -0,0 +1,45 @@ +# 6588 골드바흐의 추측 +# Python3, 시간 초과........ +# PyPy3, 메모리: 130980 KB, 시간: 440 ms + +import sys +input = sys.stdin.readline + +MAX_N = 1_000_000 # 문제 제한: n ≤ 1,000,000 → 한 번만 체를 만들어 재사용 + +# --- [준비 단계] 에라토스테네스의 체로 0~MAX_N까지 소수 여부 미리 계산 --- +prime = [True] * (MAX_N + 1) +prime[0] = prime[1] = False + +# i가 소수(True)면 i*i부터 i의 배수들을 소수 아님(False)으로 표시 +# - i*i 이전의 배수들은 더 작은 소수에서 이미 처리됨(중복 제거를 위한 최적화) +for i in range(2, int(MAX_N ** 0.5) + 1): + if prime[i]: + for j in range(i * i, MAX_N + 1, i): + prime[j] = False + +# --- [입력 & 처리] 여러 줄의 짝수 n을 받으며, 0이 나오면 종료 --- +result = [] +while True: + n = int(input()) + if n == 0: # 종료 신호 + break + + # --- [골드바흐 쌍 탐색] n = a + b (a, b 모두 소수) --- + # 탐색 전략: + # 1) a ≤ b만 보면 충분 → a는 3부터 n//2까지 + # 2) 2를 제외하면 짝수는 소수가 아니므로, a는 홀수만 확인(3,5,7,...) → step=2 + # 3) b는 n - a 로 자동 결정되므로, prime[a]와 prime[b]만 빠르게 체크 + found = False + for a in range(3, (n // 2) + 1, 2): + b = n - a + if prime[a] and prime[b]: # 두 수가 모두 소수면 골드바흐 표현 성립 + result.append(f"{n} = {a} + {b}") + found = True + break # 가장 먼저 찾은 한 쌍을 출력 형식대로 사용 + + # 문제 형식상 항상 존재한다고 가정하지만, 못 찾으면 아래 문구 출력 + if not found: + result.append("Goldbach's conjecture is wrong.") + +print('\n'.join(result)) \ No newline at end of file From 5bfeb1e46e42333c019770777f32973240c2956f Mon Sep 17 00:00:00 2001 From: jaykxo Date: Wed, 5 Nov 2025 23:49:56 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Solved:=203020=20=EA=B0=9C=EB=98=A5?= =?UTF-8?q?=EB=B2=8C=EB=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...34\353\230\245\353\262\214\353\240\210.py" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "jaykxo/week08/3020_\352\260\234\353\230\245\353\262\214\353\240\210.py" diff --git "a/jaykxo/week08/3020_\352\260\234\353\230\245\353\262\214\353\240\210.py" "b/jaykxo/week08/3020_\352\260\234\353\230\245\353\262\214\353\240\210.py" new file mode 100644 index 0000000..70471b1 --- /dev/null +++ "b/jaykxo/week08/3020_\352\260\234\353\230\245\353\262\214\353\240\210.py" @@ -0,0 +1,50 @@ +# 3020 개똥벌레 +# Python3, 메모리: 71968 KB, 시간: 436 ms +# PyPy3, 메모리: 118544 KB, 시간: 144 ms + +import sys +input = sys.stdin.readline + +N, H = map(int, input().split()) + +# 석순과 종유석의 길이 빈도를 저장할 배열 +# 인덱스 = 장애물의 길이, 값 = 해당 길이 장애물 개수 +# +2 여유 공간은 인덱스 범위 오류 방지용 +down = [0] * (H + 2) # 석순(바닥에서 위로) +up = [0] * (H + 2) # 종유석(천장에서 아래로) + +# 장애물 길이 입력 받기 +for i in range(N): + L = int(input()) + if i % 2 == 0: + # 짝수 번째는 석순 + down[L] += 1 + else: + # 홀수 번째는 종유석 + up[L] += 1 + +# 누적합으로 변환 +# down[h] = 높이 h 이상인 석순의 개수 +# up[h] = 길이 h 이상인 종유석의 개수 +# → 뒤에서부터 누적해야 “길이 이상(≥)” 형태의 합 +for h in range(H - 1, 0, -1): + down[h] += down[h + 1] + up[h] += up[h + 1] + +# 각 높이 h(1 ~ H)에서의 충돌 개수 계산 +min_hit = N + 1 # 최소 충돌 횟수: 초기값 충분히 크게 설정 +count_min = 0 # 최소 충돌이 발생하는 높이 개수 + +for h in range(1, H + 1): + # 석순은 높이 h 이상일 때 충돌 + # 종유석은 천장에서 내려오므로 (H - h + 1) 이상일 때 충돌 + hit = down[h] + up[H - h + 1] + + # 최솟값 갱신 + if hit < min_hit: + min_hit = hit + count_min = 1 # 새 최솟값이 나왔으니 개수 1로 초기화 + elif hit == min_hit: + count_min += 1 # 같은 최솟값이 또 나왔으니 개수 +1 + +print(min_hit, count_min) \ No newline at end of file