본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 11315. 오목 판정 - Python

by chaemj97 2022. 2. 24.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXaSUPYqPYMDFASQ 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

< 📝 문제 >
N X N 크기의 판이 있다. 판의 각 칸에는 돌이 있거나 없을 수 있다. 돌이 가로, 세로, 대각선 중 하나의 방향으로 다섯 개

 

이상 연속한 부분이 있는지 없는지 판정하는 프로그램을 작성하라.

 

< ❓ 생각 >


< 💻 코드 >

# '.' : 돌이 없는 칸, 'o' : 돌이 있는 칸
# 오른쪽, 오른쪽아래대각선, 아래쪽, 왼쪽아래대각선으로 연속 5개나와야함

# arr에 오목이 존재하면 'YES', 존재하지 않으면 'NO' return
def A(arr):
    # 우,하,우하대,좌하대
    dr = [0,1,1,1]
    dc = [1,0,1,-1]
    for start_r in range(N):
        for start_c in range(N):
            if arr[start_r][start_c] == 'o':
                for d in range(4):
                    r = start_r
                    c = start_c
                    # 각 방향으로 연속적으로 오목이 존재하는가?
                    cnt = 0
                    # 파이썬만 0 <= r <= N-1 허용
                    # 다른 언어는 r >= 0 and r <= N-1
                    while 0 <= r <= N-1 and 0 <= c <= N-1 and arr[r][c] == 'o':
                        cnt += 1
                        r += dr[d]
                        c += dc[d]
                    # 각 방향으로 오목이 존재?하는가
                    if cnt >= 5:
                        return 'YES'
    return 'NO'

# 테스트 케이스의 개수
T = int(input())
for tc in range(1,T+1):
    # N*N 크기의 판
    N = int(input())
    arr = [input() for _ in range(N)]

    print(f'#{tc} {A(arr)}')

 

 

728x90
반응형

댓글