Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Mar 4, 2025

🧷 문제 링크

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

🧭 풀이 시간

68분

👀 체감 난이도

✏️ 문제 설명

  • 세준이는 가장 처음에 수 하나만 가지고 있는 수열을 가지고 있다.
  • 매 초마다 1은 132로 바뀌고, 2는 211로 바뀌고, 3은 232로 바뀐다.
  • N초 후에 Left번째 수부터 Right번째 수 중에 1의 개수, 2의 개수, 3의 개수를 구하는 프로그램을 작성하시오. (Left와 Right를 셀 때, 가장 처음 수를 0번째 수, 그 다음 수를 1번째 수로 센다.)

🔍 풀이 방법

[사용한 알고리즘]

  • DP
  • 분할 정복

  • 처음에 i로 시작해서 n초가 지난 후의 문자열을 S[i][n] 이라고 하면, 각 S[i][n]은 n-1초의 상태들로 적절히 구성할 수 있다.
    image

  • 위에 적용한 DP식처럼, 각 상태에서 left ~ right 범위의 값을 구할 때도 분할 정복으로 구할 수 있다.

  • naive한 분할 정복은 시간 초과의 위험이 있기 때문에, left ~ right가 전체 범위를 포함하는 경우를 미리 DP로 계산해서 커팅해야 한다.

⏳ 회고

  • 재귀 너무 어렵고 머리 아프고

@oncsr oncsr added success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Mar 4, 2025
@ShinHeeEul ShinHeeEul merged commit 4c08b0e into main Mar 4, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants