※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 3024번 문제인 마라톤 틱택토이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/3024
3024번: 마라톤 틱택토
상근(Albert), 민혁(Barbara), 선영(Casper), 창영(Dinko), 현진(Eustahije)이가 마라톤 틱택토 게임을 하려고 한다. 이 게임은 N×N 보드에서 진행한다. 맨 처음에 보드의 모든 칸은 비어있다. 플레이어는 턴을
www.acmicpc.net
주어지는 보드에서 어느 방향으로든 3개의 '.'이 아닌 같은 연속한 문자가 존재한다면 그 문자를, 그런 문자가 없다면 "ongoing"을 출력하는 문제이다.
모든 가능한 네 방향으로의 연속한 세 칸의 쌍을 조사하는 브루트포스 코드를 작성해 문제를 해결하자. 이러한 쌍의 개수는 N이 30 이하이므로 충분히 적음을 알 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int N;
string board[30];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int r = 0; r < N; r++) cin >> board[r];
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
if (r + 2 < N && board[r][c] != '.' && board[r][c] == board[r + 1][c] && board[r + 1][c] == board[r + 2][c]) {
cout << board[r][c];
return 0;
}
if (c + 2 < N && board[r][c] != '.' && board[r][c] == board[r][c + 1] && board[r][c + 1] == board[r][c + 2]) {
cout << board[r][c];
return 0;
}
if (r + 2 < N && c + 2 < N && board[r][c] != '.' && board[r][c] == board[r + 1][c + 1] && board[r + 1][c + 1] == board[r + 2][c + 2]) {
cout << board[r][c];
return 0;
}
if (r + 2 < N && c - 2 > -1 && board[r][c] != '.' && board[r][c] == board[r + 1][c - 1] && board[r + 1][c - 1] == board[r + 2][c - 2]) {
cout << board[r][c];
return 0;
}
}
}
cout << "ongoing";
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 9925 // C++] Scout Outing (1) | 2023.09.19 |
---|---|
[BOJ 16211 // C++] 백채원 (0) | 2023.09.18 |
[BOJ 22487 // C++] Do use segment tree (0) | 2023.09.16 |
[BOJ 16206 // C++] 롤케이크 (0) | 2023.09.15 |
[BOJ 16207 // C++] 직사각형 (0) | 2023.09.14 |