반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXaSUPYqPYMDFASQ
오목 판정 문제
오목 게임의 룰 대로 다섯 방향에 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 시험도 이정도 수준으로 나와주면 좋겠다.
반응형
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
[SWEA 1860] 진기의 최고급 붕어빵 (python) (0) | 2023.03.02 |
---|---|
[SWEA 5356] 의석이의 세로로 말해요 (python) (0) | 2023.03.02 |
[SWEA 1242] 암호코드 스캔 (python) (0) | 2023.02.28 |
[SWEA] 이진탐색(tree 문제) (python) (0) | 2023.02.22 |
[SWEA] subtree (python) (0) | 2023.02.22 |
댓글