Skip to content

251201 : [BOJ 2632] 피자판매 - #2206

Merged
pinkkj merged 1 commit into
mainfrom
jehui/2197
Dec 1, 2025
Merged

pinkkj merged 1 commit into
mainfrom
jehui/2197

Conversation

@pinkkj

@pinkkj pinkkj commented Dec 1, 2025

Copy link
Copy Markdown
Contributor

🚀 이슈 번호

Resolve: {#2197}

🧩 문제 해결

스스로 해결: ❌

🔎 접근 과정

문제 해결을 위한 접근 방식을 설명해주세요.

  • 🔹 처음엔 완전 탐색 이용 -> 시간 초과의 원인
  • 🔹 m과 n을 동시에 for 문 돌며 연속으로 뽑으며 target에서 값을 뺌.

⏱️ 시간 복잡도

시간 복잡도 분석을 작성해주세요.
최악의 경우 수행 시간은 어느 정도인지 분석합니다.

  • Big-O 표기법: 내 코드: O(N^4) / 정답 코드: O(N^2) -> m과 n이 독립적이니 중복 for문X 독립적으로 계산하고 나중에 곱하기로 경우의 수 계산
  • 이유:피자 m과 n을 따로 for문 돌며 가능한 합을 모두 계산!!

💻 구현 코드

import sys

target = int(sys.stdin.readline().rstrip())
m, n = map(int, sys.stdin.readline().split())
left = [int(sys.stdin.readline().rstrip()) for _ in range(m)]
right = [int(sys.stdin.readline().rstrip()) for _ in range(n)]

lsum, rsum = [0]*2000001, [0]*2000001
lsum[0] = rsum[0] = 1
llen, rlen = len(left), len(right)
for i in range(llen):
    s = 0
    for j in range(llen):
        s += left[(i+j)%m]
        if s > target:
            break
        else:
            lsum[s] += 1
for i in range(rlen):
    s = 0
    for j in range(rlen):
        s += right[(i+j)%n]
        if s > target:
            break
        else:
            rsum[s] += 1
lsum[sum(left)] = rsum[sum(right)] = 1

ans = 0
for i in range(target+1):
    ans += (lsum[i] * rsum[target-i])
print(ans)

@pinkkj pinkkj linked an issue Dec 1, 2025 that may be closed by this pull request
@pinkkj pinkkj self-assigned this Dec 1, 2025
@pinkkj
pinkkj merged commit 56adf12 into main Dec 1, 2025
1 check passed
@pinkkj
pinkkj deleted the jehui/2197 branch December 1, 2025 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

251201 : 코딩테스트

1 participant