※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 3020번 문제인 개똥벌레이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/3020
3020번: 개똥벌레
개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이
www.acmicpc.net
각각의 종유석과 석순의 시작점과 끝점을 이용하여, 각 높이지점에서 다음 높이지점으로 갈 때의 장애물의 수의 변화를 기록해두자. 이를 이용하면 h를 순서대로 둘러보면서 각 높이에서의 장애물의 개수를 바로바로 계산해낼 수 있다.
남은 일은 높이 h에서의 충돌 장애물의 개수를 직접 보고 문제의 답을 갱신해나가는 것이다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int arr[500002];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, H; cin >> N >> H;
for (int i = 0; i < N; i++) {
if (i & 1) {
int x; cin >> x;
arr[H - x + 1]++;
arr[H + 1]--;
}
else {
int x; cin >> x;
arr[1]++;
arr[x + 1]--;
}
}
int crash = 0, mn = 1000000007;
int cnt = 0;
for (int i = 1; i <= H; i++) {
crash += arr[i];
if (crash < mn) {
mn = crash;
cnt = 1;
}
else if (crash == mn) cnt++;
}
cout << mn << ' ' << cnt;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6150 // C++] Summing Sums (0) | 2021.11.07 |
---|---|
[BOJ 2343 // C++] 기타 레슨 (0) | 2021.11.06 |
[BOJ 2512 // C++] 예산 (0) | 2021.11.04 |
[BOJ 3896 // C++] 소수 사이 수열 (0) | 2021.11.03 |
[BOJ 1477 // C++] 휴게소 세우기 (0) | 2021.11.02 |