※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 25972번 문제인 도미노 무너트리기이다.
문제는 아래 링크를 확인하자.

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

 

25972번: 도미노 무너트리기

미야노는 $N$개의 도미노를 가지고 놀고 있다. 각각의 도미노는 1차원 좌표계의 $x$좌표 위에 위치하고 있고 길이를 가진다. $i$번째 도미노의 $x$좌표를 $a_i$, 길이를 $l_i$라 하자. 도미노는 오른쪽

www.acmicpc.net

주어지는 도미노들을 x좌표 오름차순으로 살펴보면서, 지금 도미노가 쓰러졌을 때 다음 도미노가 쓰러질지 쓰러지지 않을지를 판단해 쓰러지지 않는다면 추가적으로 그 도미노를 쓰러트리는 것으로 문제를 해결하자. 이와 같은 풀이는 각 도미노는 직접 쓰러지거나 바로 이전 도미노가 쓰러지면서 같이 쓰러지게 되는 두 가지 방법으로만 쓰러질 수 있다는 점을 관찰하는 것으로 알아낼 수 있다.

 

입력으로 주어지는 도미노들의 x좌표가 예제와 같이 항상 정렬되어 있다는 조건이 없음에 유의해 구현하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N, ans;
pair<int, int> arr[500000];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	for (int i = 0; i < N; i++) cin >> arr[i].first >> arr[i].second;
	sort(arr, arr + N);

	int old = -1;
	for (int i = 0; i < N; i++) {
		if (old < arr[i].first) ans++;
		old = arr[i].first + arr[i].second;
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 25985 // C++] Fastestest Function  (0) 2022.11.17
[BOJ 17637 // C++] Count Squares  (0) 2022.11.17
[BOJ 25991 // C++] Lots of Liquid  (0) 2022.11.16
[BOJ 25973 // C++] 어지러운 트리  (0) 2022.11.15
[BOJ 1748 // C++] 수 이어 쓰기 1  (0) 2022.11.14

+ Recent posts