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

 

이번에 볼 문제는 백준 32533번 문제인 Skokovi이다.
문제는 아래 링크를 확인하자.

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

 

\(i\)번째 꽃까지 보았을 때 마야가 현재 도달할 수 있는 높이의 범위가 \(L\) 이상 \(R\) 이하라고 가정해보자. 이 때 높이가 \(H\)인 \(i+1\)번째 꽃을 보았을 때 해당 꽃에 도달이 가능하다면 \(L\)과 \(R\)은 각각 \(\min(L,H-K)\)와 \(\max(R,H+K)\)가 될 것이고, 그렇지 않다면 \(L\)과 \(R\)은 그대로 유지될 것이다.

 

초기상태(첫 꽃에 마야가 있는 상태)에서 도달할 수 있는 위치의 범위는 하나의 닫힌 구간으로 나타낼 수 있고 과정을 반복해도 상태는 닫힌 구간으로 나타나므로, 위의 과정을 통해 각 꽃에 마야가 도달할 수 있는지를 항상 판정할 수 있다.

 

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

#include <iostream>
using namespace std;

int N, K, L, R;

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

	cin >> N >> K >> L;
	R = L;
	L -= K, R += K;
	cout << 1;
	for (int i = 1; i < N; i++) {
		int x; cin >> x;
		if (x < L || R < x) cout << ' ' << 0;
		else {
			cout << ' ' << 1;
			L = min(L, x - K), R = max(R, x + K);
		}
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 32589 // C++] Flag Rotation  (2) 2024.10.31
[BOJ 32585 // C++] Building Pyramids  (2) 2024.10.30
[BOJ 20104 // C++] Timecard  (1) 2024.10.28
[BOJ 2014 // C++] 소수의 곱  (1) 2024.10.25
[BOJ 16021 // C++] Choose your own path  (2) 2024.10.24

+ Recent posts