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