[SWEA][Python]#11315. 오목 판정

MEIN_FIGUR·2021년 8월 25일
0

SWEA_문제풀이

목록 보기
19/21
post-custom-banner

📌풀이


내가 쓴 풀이(성공)

  • 대각선 판단 위한 함수 cross
    • 시작점 x, y 필요
    • flag: 왼쪽 아래 0, 오른쪽 아래 1
    • 찾은 경우 1 반환, 못 찾은 경우 0 반환
  • 세로 줄의 쉬운 판단을 위해 세로줄로 변환한 배열 생성
  • 오목을 찾은 경우, YES
  • 모든 탐색을 하였는데 못 찾은 경우, NO
def cross(grid, x, y, flag):
    # x, y : 시작점
    # flag   0: 왼쪽아래 대각선, 1: 오른쪽 아래 대각선
    for i in range(5):
        if flag and grid[y + i][x + i] == '.':
            return 0
        elif not flag and grid[y + i][x + 4 - i] == '.':
            return 0
    return 1 # 찾은 경우


T = int(input())
for tc in range(1, T + 1):
    n = int(input())
    grid = [input() for _ in range(n)] # 가로 줄 판단 위한 리스트
    tmp = list(zip(*grid))
    grid_h = [] # 세로 줄 판단 위한 리스트
    for i in range(n):
        grid_h.append(''.join(tmp[i]))

    flag = 0
    res = ''
    # 대각선 판단
    for y in range(n - 4):
        for x in range(n - 4):
            # 오목인 경우
            if cross(grid, x, y, 0) or cross(grid, x, y, 1):
                res = 'YES'
                break
        if res:
            break
    # if not res:
    #  res = 'NO'
    if not res:
        # 가로, 세로 판단
        for i in range(n):
            for j in range(n - 4):
                # 오목인 경우
                if grid[i][j:j + 5] == 'ooooo' or grid_h[i][j:j + 5] == 'ooooo':
                    res = 'YES'
                    break
            if res:
                break

    if not res:
        res = 'NO'

    print(f'#{tc} {res}')



📌후기


세로 배열로 바꾸는 과정을 알고 있었는데, 자꾸 잊어먹는다...! 잊지 말자!

profile
Growing Developer
post-custom-banner

0개의 댓글