문제
https://www.acmicpc.net/problem/2615
풀이
구현 + 브루트포스 알고리즘 문제이다. 문제 조건을 꼼꼼히 읽지 않아서 많이 틀렸는데 오답률이 낮은 이유가 있다..
북동, 동, 남동, 남 방향으로 확인하면 되는데 범위를 넘어가는 경우나 6개이상 놓여 있으면 안되는 조건을 꼭 숙지해야한다
코드
#include <bits/stdc++.h>
using namespace std;
int board[20][20];
// 범위 안에 있는지 확인하는 함수
bool inside(int x, int y) {
return (1 <= x && x <= 19) && (1 <= y && y <= 19);
}
// 행 방향으로 check
bool row_check(int x, int y) {
if (inside(x, y - 1) && board[x][y] == board[x][y - 1]) return false;
for (int i = 1; i < 5; i++) {
if (!inside(x, y + i) || board[x][y + i] != board[x][y]) return false;
}
if (inside(x, y + 5) && board[x][y] == board[x][y + 5]) return false;
return true;
}
// 열 방향으로 check
bool colum_check(int x, int y) {
if (inside(x - 1, y) && board[x][y] == board[x - 1][y]) return false;
for (int i = 1; i < 5; i++) {
if (!inside(x + i, y) || board[x + i][y] != board[x][y]) return false;
}
if (inside(x + 5, y) && board[x][y] == board[x + 5][y]) return false;
return true;
}
// 아래로 향하는 대각선으로 check
bool cross_check1(int x, int y) {
if (inside(x - 1, y - 1) && board[x][y] == board[x - 1][y - 1]) return false;
for (int i = 1; i < 5; i++) {
if (!inside(x + i, y + i) || board[x + i][y + i] != board[x][y]) return false;
}
if (inside(x + 5, y + 5) && board[x][y] == board[x + 5][y + 5]) return false;
return true;
}
// 위로 향하는 대각선으로 check
bool cross_check2(int x, int y) {
if (inside(x + 1, y - 1) && board[x][y] == board[x + 1][y - 1]) return false;
for (int i = 1; i < 5; i++) {
if (!inside(x - i, y + i) || board[x - i][y + i] != board[x][y]) return false;
}
if (inside(x - 5, y + 5) && board[x][y] == board[x - 5][y + 5]) return false;
return true;
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
for (int i = 1; i <= 19; i++) {
for (int j = 1; j <= 19; j++) {
cin >> board[i][j];
}
}
for (int i = 1; i <= 19; i++) {
for (int j = 1; j <= 19; j++) {
if (board[i][j] != 0) {
if (row_check(i, j) || colum_check(i, j) || cross_check1(i, j) || cross_check2(i, j)) {
cout << board[i][j] << '\n' << i << " " << j;
return 0;
}
}
}
}
// 승부가 안나면 0출력
cout << 0;
}
'Koala - 5기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[BOJ / Swift & Python] 23354 - 군탈체포조 (0) | 2022.02.27 |
---|---|
[BOJ / Python] 13911번: 집 구하기 (0) | 2022.02.26 |
[BOJ / JAVA] 1504 - 특정한 최단 경로 (0) | 2022.02.21 |
[BOJ / Python] 1303 - 전쟁 - 전투 (0) | 2022.02.21 |
BOJ 10026(python) : 적록색약 (0) | 2022.02.21 |