Post
4615. 재미있는 오셀로 게임 (SWEA) | Gihun Son

4615. 재미있는 오셀로 게임 (SWEA)

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

출처:

SW Expert Academy

나의 풀이

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.