본문 바로가기

Problem Solving/Baekjoon

[백준 13334 C++] 철로

오늘은 백준(BOJ) 13334번 철로 문제에 대해 다뤄볼 예정이다.

철로 문제 링크 (백준(BOJ) 13334번 문제): https://www.acmicpc.net/problem/13334

 

13334번: 철로

입력은 표준입력을 사용한다. 첫 번째 줄에 사람 수를 나타내는 양의 정수 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 각 줄에 정수 쌍 (hi, oi)가 주어진다. 여기서 hi와 oi는 −100,000,000이상, 100,000,0

www.acmicpc.net

문제 설명

백준 13334번 철로 문제는 각 사람 당 집과 사무실의 위치를 입력받은 후, 얼마나 많은 사람이 철도의 길이 L 안에 포함될 수 있는지 출력하는 문제이다. 아래 사진을 예시로 들어보면, L 범위안에 (5, 40)은 범위를 벗어나기에 제외하고, (10,20), (10, 25), (25, 30), (25, 35) 총 4명이 포함될 수 있는 것이다. 

집과 사무실의 위치

문제 풀이

백준 13334번 철로 문제의 핵심은 끝점(사무실의 위치)를 기준으로 오름차순 정렬을 수행하는 것이다. 만일 사무실의 위치가 같을 경우에는 시작점(집의 위치)를 비교하여 오름차순 정렬한다. 그리고, 우선 순위 큐(Priority Queue)를 사용하여 원소를 작은 순서대로 저장하도록 해준다.

 

알고리즘 원리 

1. 끝점을 기준으로 정렬, 끝점이 같을 경우 시작점을 비교하여 정렬 

[반복 2 ~ 5]

2. L 범위내에 존재하는 것들만 큐에 넣기 위해, (끝점 - 시작점)이 L 보다 클 경우, 무시

3. 만일 (끝점 - 시작점)이 L 보다 작을 경우, 우선 순위 큐(Priority Queue)에 시작점을 넣어준다. 

4. 끝점이 (시작 위치, 시작 위치 + L) 범위 안에 존재하는지 확인 후, 범위 안에 있다면 max()를 통해 비교

5. 범위 안에 없는 경우, pop() 

 

'Problem Solving > Baekjoon' 카테고리의 다른 글

[백준 16234 C++] 인구 이동  (0) 2021.10.03
[백준 11438 C++] LCA 2  (0) 2021.10.01
[백준 1647 C++] 도시 분할 계획  (0) 2021.09.27
[백준 1202 C++] 보석 도둑  (0) 2021.09.26
[백준 1300 C++] K번째 수  (0) 2021.09.26