Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Feb 14, 2025

🧷 문제 링크

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

🧭 풀이 시간

20분

👀 체감 난이도

✏️ 문제 설명

  • R로만 이루어진 문자열은 ㅋㅋ루ㅋㅋ 문자열이다.
  • ㅋㅋ루ㅋㅋ 문자열의 양 끝에 K를 하나씩 붙인 문자열은 ㅋㅋ루ㅋㅋ 문자열이다.
  • 문자열이 주어지면, 0개 이상의 문자를 지우고 붙였을 때 ㅋㅋ루ㅋㅋ 문자열이 되는 경우 중 길이가 가장 긴 것을 구해보자.

🔍 풀이 방법

[사용한 알고리즘]

  • 누적 합
  • 투 포인터

  • 문자열의 길이를 $N$이라고 하자.

  • 만약, $O(N^2)$에 풀어도 된다면, 두 지점 $l, r$을 잡아서 $[1, l]$$[r,N]$ 범위에서는 K만 골라오고, 그 사이에서는 R만 골라왔을 때를 모두 구해주면 된다.

  • 특징 하나를 관찰하면, 모두 구하지 않고도 답을 알아낼 수 있다.

  • ㅋㅋ루ㅋㅋ 문자열의 양 끝에는 동일한 개수의 K가 존재한다!

  • 그럼, 두 지점 $l, r$을 잡을 때 굳이 $O(N^2)$이 아니라, 동일한 개수의 K만 가지도록 적절히 이동시키면 $O(N)$에 구현할 수 있다.

⏳ 회고

  • $l, r$을 잡았을 때, 그 중간에 R이 없는 경우는 ㅋㅋ루ㅋㅋ 문자열이 아닌데 그걸 처리하지 못해서 틀렸었다.

@ShinHeeEul ShinHeeEul merged commit fdf648a into main Feb 14, 2025
1 check passed
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Feb 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants