본문 바로가기
알고리즘 풀이/SW Expert Academy

[SWEA 11315] 오목 판정(python)

by char_lie 2023. 3. 2.
반응형

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

 

SW Expert Academy

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

swexpertacademy.com

오목 판정 문제

오목 게임의 룰 대로 다섯 방향에 O가 5개가 있어 오목이 완성되는지 판단하는 문제

100% 내 생각으로 풀었는가?
→ O

오목 게임만 알면 생각보다 쉽게 구현할 수 있는 문제

내가 푼 정답코드

def omok_check(y,x):
    a = b = c = d = 0
    for i in range(5):
        if 0 <= y-i < N and omok[y-i][x] == 'o': # 가로
            a += 1
        if 0 <= x-i < N and omok[y][x-i] == 'o': # 세로
            b += 1
        if 0 <= x + i < N and 0 <= y + i < N and omok[y + i][x + i] == 'o': # 오른쪽 아래 대각선
            c += 1
        if 0 <= x + i < N and 0 <= y - i < N and omok[y - i][x + i] == 'o': # 오른쪽 위 대각선
            d += 1
    if a == 5 or b == 5 or c == 5 or d == 5: # 오목이면
        return 1 # 1 반환

T = int(input())
for case in range(1, T+1):
    N = int(input())
    omok = [list(input()) for _ in range(N)]
    out = 0
    for i in range(N):
        for j in range(N):
            if omok_check(i,j) == 1: # 체크했는데 오목이면
                out = 1
                print(f'#{case} YES') # yes 출력하기
                break
        if out == 1: # 오목이 있으면
            break # 반복문 끝
    if out == 0: # 없으면
        print(f'#{case} NO') # No

왼쪽 위부터 차례로 우측 아래로 탐색해 나가기 시작하므로 가로, 세로, 오른쪽 아래, 위 대각선만 고려해주면 오목의 여부를 알 수 있다.

5개씩만 해서 오목 여부를 판단하고 yes or no만 출력해주면 쉽게 해결 할 수 있다.


느낀점

과제로 나온 전형적인 구현 문제, 요즘 반복해서 구현 연습을 하고 있어서 풀어보기에 좋았던 문제였다.

굉장히 간단한데, D3급 문제라서 IM 수준이 이정도 되는 문제라고 한다. 생각보다 길게 써야해서 그렇지 간단하게 풀 수있는 문제인 만큼 실제 IM 시험도 이정도 수준으로 나와주면 좋겠다.

반응형

댓글