난이도 : D3
문제번호 : 11315
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
N X N 크기의 판이 있다. 판의 각 칸에는 돌이 있거나 없을 수 있다. 돌이 가로, 세로, 대각선 중 하나의 방향으로 다섯 개 이상 연속한 부분이 있는지 없는지 판정하는 프로그램을 작성하라. |
입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N(5 ≤ N ≤ 20)이 주어진다. 다음 N개의 줄의 각 줄에는 길이 N인 문자열이 주어진다. |
출력
각 테스트 케이스 마다 돌이 다섯 개 이상 연속한 부분이 있으면 “YES”를, 아니면 “NO”를 출력한다. |
예시
입력 | 출력 |
4 5 ....o ...o. ..o.. .o... o.... 5 ...o. ooooo ...o. ...o. ..... 5 .o.oo oo.oo .oo.. .o... .o... 5 .o.o. o.o.o .o.o. o.o.o .o.o. |
#1 YES #2 YES #3 YES #4 NO |
2. 문제풀이
2차원 배열을 잘 다룰 수 있는지 물어보는 문제입니다. |
3. 소스코드
four = 4
zero = 0
yes = 'YES'
no = 'NO'
def gomoku():
N = int(input())
field = []
for i in range(N):
field.append(input())
return find(field, N)
def find(field, N):
for y in range(N):
for x in range(N):
# o가 아닐때는 체크할 필요가 없음
if field[y][x] != 'o':
continue
# 오른쪽 체크
if x + four < N and five_check(field, 0, 1, y, x):
return yes
# 하단 체크
if y + four < N and five_check(field, 1, 0, y, x):
return yes
# 좌측상단
if x - four >= zero and y - four >= zero and five_check(field, -1, -1, y, x):
return yes
# 우측상단
if x + four < N and y - four >= zero and five_check(field, -1, 1, y, x):
return yes
return no
def five_check(field, dy, dx, y, x):
for z in range(1, 5):
if field[y + (dy * z)][x + (dx * z)] != 'o':
return False
return True
for t in range(int(input())):
answer = gomoku()
print('#{} {}'.format(t+1, answer))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
사칙연산 Python(SW Expert Academy) (0) | 2021.04.05 |
---|---|
길찾기 Python(SW Expert Academy) (0) | 2021.02.24 |
진기의 최고급 붕어빵 Python(SWEA) (0) | 2021.02.21 |
현주의 상자 바꾸기 Python(SWEA) (0) | 2021.02.19 |
원자소멸시뮬레이션(SW Expert Academy, SWEA) (0) | 2020.06.30 |
댓글