4615. 재미있는 오셀로 게임 (SWEA)
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
출처:
나의 풀이
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
T = int(input())
for test_case in range(1, T + 1):
N,M=map(int,input().split())
maps=[[0]*N for _ in range(N)]
maps[N//2][N//2]=2
maps[N//2-1][N//2-1]=2
maps[N//2-1][N//2]=1
maps[N//2][N//2-1]=1
dr=[1,0,-1,0,1,1,-1,-1]
dc=[0,1,0,-1,1,-1,1,-1]
for _ in range(M):
c,r,d=map(int,input().split())
c-=1
r-=1
maps[r][c]=d
for i in range(8):
nr=r+dr[i]
nc=c+dc[i]
if 0<=nr<N and 0<=nc<N and maps[nr][nc]!=0 and maps[nr][nc]!=d:
tmp_list=[[nr,nc]]
while maps[nr][nc]!=d:
nr+=dr[i]
nc+=dc[i]
if nr<0 or nr>=N or nc<0 or nc>=N or maps[nr][nc]==0:
break
tmp_list.append([nr,nc])
else:
for t in tmp_list:
maps[t[0]][t[1]]=d
c1=0
c2=0
for i in range(N):
for j in range(N):
if maps[i][j]==1:
c1+=1
elif maps[i][j]==2:
c2+=1
print(f'#{test_case} {c1} {c2}')
- 위, 아래, 좌, 우, 모든 대각선 방향을 모두 확인해야 한다. 확인했을 때, 놓은 돌과 색이 다른 돌이 이어져 있고, 마지막에 같은 색 돌이 나와야 뒤집을 수 있다.
- 따라서 위 조건대로 탐색할 수 있도록 코드를 작성하였다.
- 마지막에는 maps에서의 돌의 개수를 세고 출력하였다.
This post is licensed under CC BY 4.0 by the author.