728x90
시간 제한 1초, 메모리 제한 128MB
# 조건
- 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다.
- 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번, ... 19번의 번호가 붙는다.
- 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다.
- 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다.
- 즉, 위의 그림은 검은색이 이긴 경우이다. 하지만 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다.
- 입력으로 바둑판의 어떤 상태가 주어졌을 때, 검은색이 이겼는지, 흰색이 이겼는지 또는 아직 승부가 결정되지 않았는지를 판단하는 프로그램을 작성하시오.
- 단, 검은색과 흰색이 동시에 이기거나 검은색 또는 흰색이 두 군데 이상에서 동시에 이기는 경우는 입력으로 들어오지 않는다.
입력
- 19줄에 각 줄마다 19개의 숫자로 표현되는데, 검은 바둑알은 1, 흰 바둑알은 2, 알이 놓이지 않는 자리는 0으로 표시되며, 숫자는 한 칸씩 띄어서 표시된다.
출력
- 첫줄에 검은색이 이겼을 경우에는 1을, 흰색이 이겼을 경우에는 2를, 아직 승부가 결정되지 않았을 경우에는 0을 출력한다.
- 검은색 또는 흰색이 이겼을 경우에는 둘째 줄에 연속된 다섯 개의 바둑알 중에서 가장 왼쪽에 있는 바둑알(연속된 다섯 개의 바둑알이 세로로 놓인 경우, 그 중 가장 위에 있는 것)의 가로줄 번호와, 세로줄 번호를 순서대로 출력한다.
# 접근 방법
- 완전 탐색으로 풀어주면 된다.
- 우선 입력받은 바둑 판을 2중 for문으로 탐색하며 1 또는 2를 발견한 경우 check 함수를 돌려준다.
- check 함수에서는 크게 4개의 방향을 체크해준다.
- 좌우, 상하, 왼쪽위와 오른쪽 아래, 오른쪽 위와 왼쪽 아래
- 해당 방향에 일직선으로 정확히 5개의 돌이 존재하는 경우 승리한 돌의 색깔을 출력해주고
- 해당 좌표 중 가장 왼쪽에 있는 것을 출력해주면 된다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
def check(si, sj, color):
# 상하, 좌우, 왼쪽위오른쪽아래, 오른쪽위왼쪽아래
# 왼쪽 두개는 i, 오른쪽 두개는 j
d = [[-1, 1, 0, 0], [0, 0, -1, 1], [-1, 1, -1, 1], [-1, 1, 1, -1]]
for k in range(4):
cnt = 1
result = [(si, sj)]
for u in range(2):
ni, nj = si, sj
while True:
ni, nj = ni + d[k][u], nj + d[k][u + 2]
if 0<=ni<19 and 0<=nj<19 and arr[ni][nj] == color:
cnt += 1
result.append((ni, nj))
else:
break
# 돌이 정확히 5개라면
if cnt == 5:
result.sort(key=lambda x:(x[1], x[0]))
print(color)
print(result[0][0]+1, result[0][1]+1)
return 1
arr = [[*map(int, input().split())] for _ in range(20)]
flag = 0
for i in range(19):
for j in range(19):
if arr[i][j]:
flag = check(i, j, arr[i][j])
if flag:
sys.exit()
print(0)
728x90
'ALGORITHM > Brute Force' 카테고리의 다른 글
[백준 5568번] 파이썬 - 카드 놓기 (0) | 2023.09.13 |
---|---|
[백준 2422번] 파이썬 - 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (3) | 2023.08.27 |
[백준 1515번] 파이썬 - 수 이어쓰기 (0) | 2023.07.23 |
[백준 20529번] 파이썬 - 가장 가까운 세 사람의 심리적 거리 (0) | 2023.06.21 |
[백준 16637번] 파이썬 - 괄호 추가하기 (0) | 2023.06.02 |