Skip to content

Conversation

@ChanhuiSeok
Copy link
Member

📘 풀이한 문제

⭐ 문제에서 주로 사용한 알고리즘
  • 라인스위핑(스윕라인) 알고리즘에서 우선순위 큐를 사용하여 구현하였습니다.

📜 대략적인 코드 설명
  • 맨 처음에 접근이 좀 힘들었습니다. 알아 보니 라인스위핑 문제는 우선순위 큐를 사용하는 경우가 꽤 있다고 합니다.
    먼저 데이터들을 문제를 풀 수 있도록 정렬하고, 선을 한 번만 훑듯이 자료들을 보면서 조건에 맞게 최종적인 답안을 찾아가는 형식이었습니다.
  • 모든 사람들을 끝점을 기준으로 오름차순 정렬해 놓은 다음, 그 사람들을 차례대로 하나씩 살펴 보면서 선분 L에 들어올 수 있는지 판단합니다. O(n)으로 n명의 사람에 대해 살펴봅니다.
  • 이 때 사람 길이가 d 이하일 경우 포함 가능한 선분으로 보고 우선순위 큐에 시작점을 넣어 놓으며, 현재 새롭게 살펴보는 사람의 끝점에서 우선순위 큐의 top에 있는 시작점의 거리가 d 이하이면 괜찮지만, 그 거리가 더 길다면 우선순위 큐의 top에 있던 시작점을 가진 사람은 더 이상 선분 L에 포함될 수 없으므로 우선순위 큐에서 pop 합니다.
  • 매 상황마다 우선순위 큐의 크기가 선분 L에 포함될 수 있는 사람들의 값과 같습니다.
  • 한 번만 풀고 나중에 기억나지 않을까봐 블로그에 정리해 두었습니다. (https://chanhuiseok.github.io/posts/baek-28/)

@ChanhuiSeok ChanhuiSeok added the problem-solved Indication that this problem is solved label Oct 5, 2020
@ChanhuiSeok ChanhuiSeok merged commit daccbce into CodeTest-StudyGroup:master Oct 5, 2020
@ChanhuiSeok ChanhuiSeok deleted the ps branch October 6, 2020 11:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

problem-solved Indication that this problem is solved

1 participant