SWEA(Python) 풀이/D3

SWEA[D3] (Python) 11315번 오목 판정 풀이

개발윗미 2022. 5. 18. 12:46

Python으로 구현한 11315번 오목 판정 문제 풀이입니다.

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AXaSUPYqPYMDFASQ&categoryId=AXaSUPYqPYMDFASQ&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=PYTHON&select-1=3&pageSize=10&pageIndex=2 

 

SW Expert Academy

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

swexpertacademy.com


t = int(input())

def check() :
    # 오른쪽, 아래, 오른쪽 아래 대각선, 왼쪽 아래 대각선
    dx = [0, 1, 1, 1]
    dy = [1, 0, 1, -1]

    for i in range(n) :
        for j in range(n) :
            if data[i][j] == 'o' :
                for dir in range(4) :
                    nx = i
                    ny = j
                    cnt = 0

                    while 0 <= nx < n and 0 <= ny < n and data[nx][ny] == 'o' :
                        cnt += 1
                        nx += dx[dir]
                        ny += dy[dir]
                    if cnt >= 5 :
                        return 'YES'
    return 'NO'

for tc in range(1, t + 1) :
    n = int(input())
    data = [input() for _ in range(n)]

    print('#%d %s' % (tc, check()))

 

1. 각 테스트 케이스마다 오목판 상태를 입력받고, check() 함수를 통해 반환받은 문자열을 해당 테스트 케이스 번호와 함께 출력한다.

 

2. check() 함수의 작업은 아래와 같다.

  - (→, ↓, ↘, ↙) 순으로 방향 dx, dy를 정의한다.

  - 오목판의 한 칸 정보를 하나씩 확인하는데, 만약 해당 칸에 돌이 놓여져있다면('o') 방향을 하나씩 확인하여 돌이 연속으로 5개가 놓여져 있는지 확인한다.

  - 만약 연속으로 놓여진 돌의 개수(cnt)가 5 이상이라면 'YES'를 반환하고, 오목판의 상태를 모두 확인하였음에도 'YES'가 반환되지 않았다면 'NO'를 반환한다.