11315. 오목 판정
문제)
N X N 크기의 판이 있다. 판의 각 칸에는 돌이 있거나 없을 수 있다. 돌이 가로, 세로, 대각선 중 하나의 방향으로 다섯 개 이상 연속한 부분이 있는지 없는지 판정하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N(5 ≤ N ≤ 20)이 주어진다.
다음 N개의 줄의 각 줄에는 길이 N인 문자열이 주어진다. 각 문자는 ‘o’또는 ‘.’으로, ‘o’는 돌이 있는 칸을 의미하고, ‘.’는 돌이 없는 칸을 의미한다.
[출력]
각 테스트 케이스 마다 돌이 다섯 개 이상 연속한 부분이 있으면 “YES”를, 아니면 “NO”를 출력한다.
이 문제를 풀 때 주의해야 할 점! [반례]
7
.......
o......
.o.....
..o....
...o...
....o..
.......
위 의 경우처럼 1칸씩 좌우로 밀려있는 대각선도 신경을 잘 써야 한다.
나는 이것 때문에 거의 2시간을 고생한 듯...
풀이)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
def check1(li): # 행을 확인하는 함수
for i in range(n):
cnt = 0
for j in range(n):
if li[i][j] == "o":
cnt += 1
if cnt == 5:
return 1
elif li[i][j] == ".":
cnt = 0
else:
return 0
def check2(li): # ↘ 대각선.
for i in range(n):
for j in range(n):
cnt = 0
for k in range(5):
if i + k < n and j + k < n and li[i + k][j + k] == 'o':
cnt += 1
else:
break
if cnt == 5:
return 1
else:
return 0
# print(check2(li))
def check3(li): # 우측 위로 가는 대각선
for i in range(n):
for j in range(n - 1, -1, -1):
cnt = 0
for k in range(5):
if i + k < n and j - k < n and li[i + k][j - k] == 'o':
cnt += 1
else:
break
if cnt >= 5:
return 1
else:
return 0
def check4(li): # 열을 확인
for i in range(n):
cnt = 0
for j in range(n):
if li[j][i] == "o":
cnt += 1
if cnt == 5:
return 1
else:
cnt = 0
else:
return 0
T = int(input())
for _ in range(T):
n = int(input())
li = [list(input()) for i in range(n)]
answer = check1(li) + check2(li) + check3(li) + check4(li)
if answer > 0:
print(f"#{_ + 1} YES")
else:
print(f"#{_ + 1} NO")
|
cs |
문제 출처 : https://swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 12712. 파리퇴치3 (0) | 2022.02.28 |
---|---|
[SW Expert Academy] 3499. 퍼펙트 셔플 (0) | 2022.02.28 |
[python] Stack과 DFS (0) | 2022.02.27 |
[SW Expert Academy] 1224. 계산기3 (0) | 2022.02.25 |
[SW Expert Academy] 1223. 계산기2 (0) | 2022.02.25 |