Skip to content

Conversation

@ShinHeeEul
Copy link
Contributor

🧷 문제 링크

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

🧭 풀이 시간

540 분

👀 체감 난이도

✏️ 문제 설명

45656이란 수를 보자.

이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.

N이 주어질 때, 길이가 N이면서 0부터 9까지 숫자가 모두 등장하는 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. 0으로 시작하는 수는 계단수가 아니다.

🔍 풀이 방법

3차원 DP + 비트 마스킹
dp[길이][마지막 수][이제까지 나온 수 비트 마스킹] 으로 두고
dp[i][j][k | j] += dp[i-1][j+1][k] + dp[i][j-1][k]을 점화식으로 세운다. dp 배열을 다 채운 후, 길이가 N이면서 0~9까지 모두 나온 값들을 전부 더해서 구해준다.

⏳ 회고

앞에서부터 차근차근 쌓아가도 되었는데, 중간에서 시작해 양쪽으로 확장하면서 비교하려고 한게 화근이었다. 중복을 잡을 수가 없더라. 그리고 이제껏 백트래킹을 이용한 비트마스킹만 풀어왔는데, 그렇지 않은 문제도 있다는 것을 알게 되었다.

@ShinHeeEul ShinHeeEul added fail 😢 해설을 보고 풀었거나, 못 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Feb 10, 2025
@ShinHeeEul ShinHeeEul self-assigned this Feb 10, 2025
@ShinHeeEul ShinHeeEul merged commit 1b2a52a into main Feb 10, 2025
1 check passed
@oncsr
Copy link
Contributor

oncsr commented Feb 11, 2025

저는 이거 탑다운으로 풀었는데, 바텀업 풀이가 신기하네요

@ShinHeeEul
Copy link
Contributor Author

ShinHeeEul commented Feb 11, 2025

저는 이거 탑다운으로 풀었는데, 바텀업 풀이가 신기하네요

@oncsr 오 혹시 탑다운 코드 올려줄 수 있으신가요..! 너무 탑다운으로 하고 싶었는데 실패했어요 ㅠ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fail 😢 해설을 보고 풀었거나, 못 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants