※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |