아이디어
- 2차원 리스트를 탐색해야한다.
- 델타를 사용한다. (단, 반경 체크는 필수로 해준다.)
- 시간 제한에 영향 받지 않으므로 그냥 모든 지점을 델타의 기준 점으로 잡는다.
- 모든 지점을 잡을 것이므로 델타는 오른쪽, 아래, 대각우좌밑으로, 대각좌우밑으로 4개만 만든다.
- 오목은 한 개만 있는 것 같다. 오목 찾으면 YES를 리턴하고 끝내는 함수를만든다.
풀이
def find_omok(N):
for i in range(N):
for j in range(N):
for k in range(4):
oh = 0
for l in range(5):
nr, nc = i + dr[k] * l, j + dc[k] * l
if nr < 0 or nr >= N or nc < 0 or nc >= N:
break
else:
if omok[nr][nc] == 'o':
oh += 1
if oh == 5:
return 'YES'
return 'NO'
for tc in range(int(input())):
N = int(input())
omok = [list(input()) for _ in range(N)]
dr = [0, 1, 1, 1] # 우, 하, 좌우대각, 우좌대각
dc = [1, 0, 1, -1]
print(f'#{tc+1}', find_omok(N))
'SWEA' 카테고리의 다른 글
SWEA 1289 원재의 메모리 복구하기 (파이썬) (0) | 2022.08.28 |
---|---|
SWEA 1220 Magnetic (파이썬) (0) | 2022.08.25 |
SWEA 1224 계산기3 후위표기법 (파이썬) (0) | 2022.08.23 |
SWEA 1961 숫자 배열 회전 (파이썬) (0) | 2022.08.19 |
SWEA 1945 간단한 소인수 분해 (파이썬) (0) | 2022.08.19 |