본문 바로가기
Algorithm(CodeTree, Python)/완전탐색1

[코드트리 자리 수 단위로 완전탐색] 숨은 단어 찾기 2 python

by kurooru 2022. 12. 3.
# n, m 입력
n, m = map(int, input().split())
# grid 입력
grid = [
    input()
    for _ in range(n)
]

# 함수들
# l_to_r(x, y)
def l_to_r(x, y):
    # 범위 내에 있고, 오른쪽 두 개가 'E'면 성공
    return y <= m-3 and grid[x][y+1] == 'E' and grid[x][y+2] == 'E'

# r_to_l(x, y)
def r_to_l(x, y):
    # 범위 내에 있고, 왼쪽 두 개가 'E'면 성공
    return y >= 2 and grid[x][y-1] == 'E' and grid[x][y-2] == 'E'

# u_to_d(x, y)
def u_to_d(x, y):
    # 범위 내에 있고, 아래 두 개가 'E'면 성공
    return x <= n-3 and grid[x+1][y] == 'E' and grid[x+2][y] == 'E'

# d_to_u(x, y)
def d_to_u(x, y):
    # 범위 내에 있고, 위 두 개가 'E'면 성공
    return x >= 2 and grid[x-1][y] == 'E' and grid[x-2][y] == 'E'

# ru_to_ld(x, y)
def ru_to_ld(x, y):
    # 범위 내에 있고, 왼쪽 대각선 아래 두 개가 'E'면 성공
    return x <= n-3 and y >= 2 and grid[x+1][y-1] == 'E' and grid[x+2][y-2] == 'E'

# lu_to_rd(x, y)
def lu_to_rd(x, y):
    # 범위 내에 있고, 오른쪽 대각선 아래 두 개가 'E'면 성공
    return x <= n-3 and y <= m-3 and grid[x+1][y+1] == 'E' and grid[x+2][y+2] == 'E'

# rd_to_lu(x, y)
def rd_to_lu(x, y):
    # 범위 내에 있고, 왼쪽 대각선 위 두 개가 'E'면 성공
    return x >= 2 and y >= 2 and grid[x-1][y-1] == 'E' and grid[x-2][y-2] == 'E'

# ld_to_ru(x, y)
def ld_to_ru(x, y):
    # 범위 내에 있고, 왼쪽 대각선 위 두 개가 'E'면 성공
    return x >= 2 and y <= m-3 and grid[x-1][y+1] == 'E' and grid[x-2][y+2] == 'E'
    
# 설계
# ans
ans = 0

# 완전 탐색 시작
for i in range(n):
    for j in range(m):
        # 'L'을 찾고
        if grid[i][j] == 'L':
            # 왼쪽에서 오른쪽으로 'LEE'이면,
            if l_to_r(i, j):
                # 정답에 추가
                ans += 1
            # 오른쪽에서 왼쪽으로 'LEE' 이면,
            if r_to_l(i, j):
                # 정답에 추가
                ans += 1
            # 위에서 아래로 'LEE' 이면,
            if u_to_d(i, j):
                # 정답에 추가
                ans += 1
            # 아래서 위로 'LEE' 이면,
            if d_to_u(i, j):
                # 정답에 추가
                ans += 1
            # 오른쪽 위에서 왼쪽 아래로 'LEE' 이면,
            if ru_to_ld(i, j):
                # 정답에 추가
                ans += 1
            # 왼쪽 위에서 오른쪽 아래로 'LEE' 이면,
            if lu_to_rd(i, j):
                # 정답에 추가
                ans += 1
            # 오른쪽 아래에서 왼쪽 위로 'LEE' 이면,
            if rd_to_lu(i, j):
                # 정답에 추가
                ans += 1
            # 왼쪽 아래에서 오른쪽 위로 'LEE' 이면,
            if ld_to_ru(i, j):
                # 정답에 추가
                ans += 1

# 출력
print(ans)