Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Jul 24, 2025

🧷 문제 링크

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

🧭 풀이 시간

25분

👀 체감 난이도

✏️ 문제 설명

길이가 L만큼 떨어진 두 평행한 수직선 T, D가 있다.
두 수직선의 어떤 점 사이를 잇는 선분을 막대기라 하며, 이런 막대기가 N개 주어진다.
막대기의 길이는 택시 거리로 계산한다.

아래 세 조건을 만족하는 지그재그 선의 길이의 최댓값을 구해보자.

  1. 막대기들은 끝점을 제외하곤 서로 교차하지 않는다.
  2. 세 개 이상의 막대기 끝이 한 점에서 만나지 않는다.
  3. 모든 막대기는 연결되어 있다.

🔍 풀이 방법

  • DP

규칙성이 없어 보이지만, 수직선 T나 D를 기준으로 잡고 정렬하면 DP식을 정의할 수 있게 된다.
막대기들을 수직선 D의 좌표 기준 오름차순으로 정렬한다.

두 개의 DP를 정의한다.

  1. H[i] = 수직선 T에서의 좌표 i에서 끝나는 지그재그 선의 최대 길이
  2. L[i] = 수직선 D에서의 좌표 i에서 끝나는 지그재그 선의 최대 길이

이렇게 DP를 정의하면, 막대기 a = (t, d)에 대해,
H[t] = max(H[t], D[d] + |t-d| + L)
L[d] = max(L[d], H[t] + |t-d| + L)
이 성립한다.

근데 좌표의 범위가 10^9라서 배열 인덱스로 써먹을 수가 없다.
그래서 배열 대신 Map을 써서 큰 수도 key로 쓸 수 있게 해줬다.

이 중 최댓값을 뽑아 출력해줬다.

⏳ 회고

으아아아악

@oncsr oncsr self-assigned this Jul 24, 2025
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Jul 24, 2025
@ShinHeeEul ShinHeeEul merged commit dd55759 into main Jul 24, 2025
1 check passed
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