※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 24649번 문제인 Letters Q and F이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/24649
주어진 Q와 F의 모양은 두 번째 열의 첫째 행부터 셋째 행까지를 중점적으로 볼 때 항상 검은칸-흰칸-검은칸 구조를 가지고 있어야 함을 관찰하자.
위 관찰을 이용하면, 오른쪽부터 색칠된 칸들을 살펴볼 때 검은칸-흰칸-검은칸 구조가 나올 때마다 이 구조가 Q에 포함되는 구조일 수 있는지 먼저 판단하고, 그 다음으로 이 구조가 F에 포함될 수 있는 구조인지 판단하는 것을 반복해나가는 것으로 문제를 해결할 수 있음을 유추할 수 있다. Q에 포함될 수 있는 구조인데 지나치면 Q에 포함되는 마지막 열 검은 칸이 이후에 어떤 문자에도 포함될 수가 없어짐을 확인하자. 이와 유사하게 F의 경우도 정당성을 보일 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int R, C;
string board[300];
int Q, F;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> R >> C;
for (int r = 0; r < R; r++) cin >> board[r];
for (int c = C - 2; c > 0; c--) {
for (int r = 1; r + 3 < R; r++) {
if (board[r - 1][c] == '#' && board[r][c] == '.' && board[r + 1][c] == '#') {
if (board[r][c + 1] == '#') {
if (board[r - 1][c - 1] == '#' && board[r - 1][c] == '#' && board[r - 1][c + 1] == '#' && board[r][c - 1] == '#' && board[r][c + 1] == '#' && board[r + 1][c - 1] == '#' && board[r + 1][c] == '#' && board[r + 1][c + 1] == '#' && board[r + 2][c + 1] == '#' && board[r + 3][c + 1] == '#') {
Q++;
board[r - 1][c - 1] = board[r - 1][c] = board[r - 1][c + 1] = board[r][c - 1] = board[r][c + 1] = board[r + 1][c - 1] = board[r + 1][c] = board[r + 1][c + 1] = board[r + 2][c + 1] = board[r + 3][c + 1] = '.';
}
}
else {
if (board[r - 1][c - 1] == '#' && board[r - 1][c] == '#' && board[r - 1][c + 1] == '#' && board[r][c - 1] == '#' && board[r + 1][c - 1] == '#' && board[r + 1][c] == '#' && board[r + 2][c - 1] == '#' && board[r + 3][c - 1] == '#') {
F++;
board[r - 1][c - 1] = board[r - 1][c] = board[r - 1][c + 1] = board[r][c - 1] = board[r + 1][c - 1] = board[r + 1][c] = board[r + 2][c - 1] = board[r + 3][c - 1] = '.';
}
}
}
}
}
cout << Q << ' ' << F;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 12065 // C++] gMatrix (Large) (0) | 2024.07.20 |
---|---|
[BOJ 8478 // C++] Chessboard (0) | 2024.07.19 |
[BOJ 11541 // C++] At most twice (1) | 2024.07.17 |
[BOJ 27730 // C++] 견우와 직녀 (1) | 2024.07.16 |
[BOJ 30512 // C++] 조용히 완전히 영원히 (0) | 2024.07.15 |