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

 

이번에 볼 문제는 백준 16805번 문제인 Where is the Boundary이다.
문제는 아래 링크를 확인하자.

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

 

칸과 칸 사이의 각 경계에 대하여 해당 경계의 좌측에 있는 E의 개수와 우측에 있는 W의 개수의 합의 최솟값을 구하는 문제이다.

 

각 칸에 대하여 그 칸보다 왼쪽에 있는 E 개수를 저장한 누적합 배열과 오른쪽에 있는 W 개수를 저장한 누적합 배열을 먼저 구해두고, 이를 이용해 문제를 선형 시간에 해결하자.

 

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

 

#include <iostream>
using namespace std;

int N, M;
int cntE[10001], cntW[10001];
int ans, val;

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

	cin >> N >> M;
	while (M--) {
		for (int i = 1; i <= N; i++) {
			char c; cin >> c;
			if (c == 'E') cntE[i]++;
			else cntW[i]++;
		}
	}
	for (int i = 1; i <= N; i++) cntE[i] += cntE[i - 1];
	for (int i = 1; i <= N; i++) cntW[i] += cntW[i - 1];
	val = cntW[N];
	for (int i = 1; i <= N; i++) {
		int cnt = cntE[i] + cntW[N] - cntW[i];
		if (cnt < val) val = cnt, ans = i;
	}

	cout << ans << ' ' << ans + 1;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 16551 // C++] Potato Sacks  (1) 2024.09.14
[BOJ 9997 // C++] 폰트  (2) 2024.09.13
[BOJ 16581 // C++] Lie Detector  (2) 2024.09.11
[BOJ 24145 // C++] 折り紙 (Origami)  (2) 2024.09.10
[BOJ 15487 // C++] A[j]-A[i]+A[l]-A[k]  (1) 2024.09.09

+ Recent posts