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

 

이번에 볼 문제는 백준 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

+ Recent posts