Skip to content

Conversation

@Ukj0ng
Copy link
Contributor

@Ukj0ng Ukj0ng commented Dec 23, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/14437

🧭 풀이 시간

60분

👀 체감 난이도

✏️ 문제 설명

문제를 재해석하면, N개의 칸에 0~25까지의 수를 채워 넣을 때, 그 합이 s인 경우의 수는?

🔍 풀이 방법

dp[i][j]: i번째 칸까지의 합이 j인 경우의 수
로 상태를 정의했다.
그렇게 해보면, $dp[i][j] = dp[i-1][j] + dp[i-1][j-1] + ... + dp[i-1][j-25]$ 가 된다.

그런데 이렇게 문제를 풀면 3중 for문이 나와 시간초과가 발생한다.

  • $dp[i][j] = dp[i-1][j] + dp[i-1][j-1] + ... + dp[i-1][j-25]$
  • $dp[i][j-1] = dp[i-1][j-1] + dp[i-1][j-2] + ... + dp[i-1][j-26]$
    두 점화식으로 미루어 보았을 때, $dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-26]$으로 두 식을 합칠 수 있다.
    다음과 같은 누적합을 통해서 답을 구하면 된다.

⏳ 회고

MOD를 나눌 때, 위 식에선 음수가 될 수 도 있다. 따라서 MOD를 더한 다음 나머지를 구했는데, 이 식을 한꺼번에 계산하면 overflow가 발생할 수 있다. 이걸 몰라서 틀렸다. 더할 때, 한꺼번에 더하는 걸 습관화하지말고 자료형에 유의해서 계산하는 습관을 들이자.

@ShinHeeEul ShinHeeEul merged commit 6a42c4e into main Dec 23, 2025
1 check passed
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.

3 participants