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

 

이번에 볼 문제는 백준 2615번 문제인 오목이다.
문제는 아래 링크를 확인하자.

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

 

2615번: 오목

오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호

www.acmicpc.net

오목 게임의 한 장면이 주어질 때, 승패가 결정났는지를 먼저 판단하고, 결정났다면 연속으로 다섯개 놓여있는 돌의 위치가 어디인지를 추가로 출력하는 문제이다.

 

바둑판 위에서 일렬로 다섯 개의 돌이 연속으로 위에 놓일 수 있는 모든 가능한 방법에 대해 (1) 해당 다섯 위치에 같은 돌이 올려져 있고, (2) 그 연장선에 해당하는 위치에 그 같은 돌이 올려져있지 않은지를 확인해 승패가 결정났는지를 판단할 수 있다.

 

돌이 다섯 개 연속으로 놓인 곳의 위치를 출력할 때, 가장 위쪽에 놓인 돌이 우선순위가 아닌 가장 왼쪽에 놓인 돌의 위치를 우선적으로 출력해야함에 유의하자.

 

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

#include <iostream>
using namespace std;

int board[21][21];

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

	for (int r = 1; r < 20; r++) {
		for (int c = 1; c < 20; c++) {
			cin >> board[r][c];
		}
	}

	for (int r = 1; r < 20; r++) {
		for (int c = 1; c < 16; c++) {
			if (board[r][c] && board[r][c] == board[r][c + 1] && board[r][c + 1] == board[r][c + 2] && board[r][c + 2] == board[r][c + 3] && board[r][c + 3] == board[r][c + 4] && board[r][c-1]!=board[r][c] && board[r][c+4] != board[r][c+5]) {
				cout << board[r][c] << '\n';
				cout << r << ' ' << c;
				return 0;
			}
		}
	}

	for (int r = 1; r < 16; r++) {
		for (int c = 1; c < 20; c++) {
			if (board[r][c] && board[r][c] == board[r + 1][c] && board[r + 1][c] == board[r + 2][c] && board[r + 2][c] == board[r + 3][c] && board[r + 3][c] == board[r + 4][c] && board[r - 1][c] != board[r][c] && board[r + 4][c] != board[r + 5][c]) {
				cout << board[r][c] << '\n';
				cout << r << ' ' << c;
				return 0;
			}
		}
	}

	for (int r = 1; r < 16; r++) {
		for (int c = 1; c < 16; c++) {
			if (board[r][c] && board[r][c] == board[r + 1][c + 1] && board[r + 1][c + 1] == board[r + 2][c + 2] && board[r + 2][c + 2] == board[r + 3][c + 3] && board[r + 3][c + 3] == board[r + 4][c + 4] && board[r - 1][c - 1] != board[r][c] && board[r + 4][c + 4] != board[r + 5][c + 5]) {
				cout << board[r][c] << '\n';
				cout << r << ' ' << c;
				return 0;
			}
		}
	}

	for (int r = 5; r < 20; r++) {
		for (int c = 1; c < 16; c++) {
			if (board[r][c] && board[r][c] == board[r - 1][c + 1] && board[r - 1][c + 1] == board[r - 2][c + 2] && board[r - 2][c + 2] == board[r - 3][c + 3] && board[r - 3][c + 3] == board[r - 4][c + 4] && board[r + 1][c - 1] != board[r][c] && board[r - 4][c + 4] != board[r - 5][c + 5]) {
				cout << board[r][c] << '\n';
				cout << r << ' ' << c;
				return 0;
			}
		}
	}

	cout << 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 27866 // C++] 문자와 문자열  (0) 2023.03.09
[BOJ 27865 // C++] 랜덤 게임?  (0) 2023.03.09
[BOJ 2617 // C++] 구슬 찾기  (0) 2023.03.08
[BOJ 6986 // C++] 절사평균  (0) 2023.03.08
[BOJ 27622 // C++] Suspicious Event  (0) 2023.03.08

+ Recent posts