Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Feb 26, 2025

🧷 문제 링크

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

🧭 풀이 시간

120+분

👀 체감 난이도

✏️ 문제 설명

  • N개의 일거리를 A, B, C 세 명에게 분배하려고 한다.
  • 각 사람이 받는 일거리의 보수 합을 $S_A, S_B, S_C$라고 할 때, $| S_B - S_C | \le D$가 되도록 일을 나누는 가짓수를 구해보자.

🔍 풀이 방법

[사용한 알고리즘]

  • 중간에서 만나기
  • 정렬?
  • 투 포인터

  • N개의 일거리들을 반으로 가른 뒤, 나눠진 좌우 각각에서 가능한 $S_B - S_C$ 값들을 완탐으로 구한다.
  • 왼쪽 부분의 결과물을 L, 오른쪽 부분의 결과물을 R이라 하면, L과 R을 정렬시켜서 투 포인터로 경우의 수를 모두 구할 수 있다.
  • 근데 그냥 sort()로 정렬하면 시간 초과가 난다.

특수한 경우의 정렬

완탐을 돌릴 때, 각 스텝에서 중간 결과물에 일거리 하나를 추가시켜 다음 결과물을 도출한다.
이 때, 다음 결과물에 존재하는 값들은 모두 세 가지 경우 중 하나이다.

  1. 중간 결과물 - 현재 일거리 보수
  2. 중간 결과물 그대로
  3. 중간 결과물 + 현재 일거리 보수

만약 중간 결과물이 정렬된 상태라 가정하면, 세 개의 포인터를 사용해 다음 결과물 또한 정렬된 상태로 만들 수 있다.

⏳ 회고

.....

@oncsr oncsr added success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Feb 26, 2025
@ShinHeeEul ShinHeeEul merged commit a81538b into main Feb 26, 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