From 0ae3dc4601af48fc5b14b4c5cec2cf3e61279f23 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Wed, 14 Jan 2026 21:51:30 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20III]=20Title:=20=EC=B4=88=EC=BD=9C?= =?UTF-8?q?=EB=A6=BF=20=ED=95=A9=EC=B9=98=EA=B8=B0,=20Time:=20172=20ms,=20?= =?UTF-8?q?Memory:=2061208=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Silver/34948. 초콜릿 합치기/README.md | 36 +++++++++++++++++++ .../34948. 초콜릿 합치기/초콜릿 합치기.py | 27 ++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 백준/Silver/34948. 초콜릿 합치기/README.md create mode 100644 백준/Silver/34948. 초콜릿 합치기/초콜릿 합치기.py diff --git a/백준/Silver/34948. 초콜릿 합치기/README.md b/백준/Silver/34948. 초콜릿 합치기/README.md new file mode 100644 index 0000000..2b6cdea --- /dev/null +++ b/백준/Silver/34948. 초콜릿 합치기/README.md @@ -0,0 +1,36 @@ +# [Silver III] 초콜릿 합치기 - 34948 + +[문제 링크](https://www.acmicpc.net/problem/34948) + +### 성능 요약 + +메모리: 61208 KB, 시간: 172 ms + +### 분류 + +그리디 알고리즘, 브루트포스 알고리즘, 정렬, 누적 합 + +### 제출 일자 + +2026년 1월 14일 21:51:12 + +### 문제 설명 + +

초콜릿을 좋아하는 정화는 N개의 초콜릿을 모았다. 친구의 건강을 염려한 은채는 초콜릿을 하나만 남기고 버리라고 했다. 정화는 눈물을 머금고 가지고 있는 초콜릿 중 몇 개를 골라 하나로 합치기로 했다.

+ +

초콜릿을 합치기 위해선 사용할 초콜릿들의 세로 길이가 모두 같아야 한다. 정화는 초콜릿의 세로 길이를 원하는 만큼 줄일 수 있다.

+ +

합친 후의 초콜릿 크기를 (세로 길이) × (가로 길이)라고 하자. 합친 후의 초콜릿 크기의 최댓값을 알아보자!

+ +### 입력 + +

첫째 줄에 초콜릿의 개수 N이 주어진다. (1N200000)

+ +

둘째 줄에 1,2,,N번 초콜릿의 세로 길이를 나타내는 N개의 정수 H1,H2,,HN이 공백으로 구분되어 주어진다. (1Hi200000)

+ +

셋째 줄에 1,2,,N번 초콜릿의 가로 길이를 나타내는 N개의 정수 W1,W2,,WN이 공백으로 구분되어 주어진다. (1Wi200000)

+ +### 출력 + +

합친 후의 초콜릿의 크기의 최댓값을 출력한다.

+ diff --git a/백준/Silver/34948. 초콜릿 합치기/초콜릿 합치기.py b/백준/Silver/34948. 초콜릿 합치기/초콜릿 합치기.py new file mode 100644 index 0000000..520b80e --- /dev/null +++ b/백준/Silver/34948. 초콜릿 합치기/초콜릿 합치기.py @@ -0,0 +1,27 @@ +import sys + +def main(): + input = sys.stdin.readline + N = int(input().strip()) + H = list(map(int, input().split())) + W = list(map(int, input().split())) + + MAXH = 200000 # 문제 조건 + width_at = [0] * (MAXH + 2) + + for hi, wi in zip(H, W): + width_at[hi] += wi + + ans = 0 + suffix = 0 # 현재까지의 sum_{v>=h} width_at[v] + + for h in range(MAXH, 0, -1): + suffix += width_at[h] + area = h * suffix + if area > ans: + ans = area + + print(ans) + +if __name__ == "__main__": + main()