https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWQmA4uK8ygDFAXj 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


풀이 및 해설(주석)

for tc in range(int(input())):
    N, M = map(int, input().split())
    osero = [[0] * N for _ in range(N)]
    osero[N//2][N//2] = 2
    osero[N//2-1][N//2-1] = 2
    osero[N//2-1][N//2] = 1
    osero[N//2][N//2-1] = 1

    # 현재 위치 주변 8방향 설정
    dr = [1, 0, -1, 0, -1, -1, 1, 1]
    dc = [0, 1, 0, -1, 1, -1, 1, -1]
    for _ in range(M):
        c, r, bw = map(int, input().split())
        r -= 1
        c -= 1
        osero[r][c] = bw            # 일단, 이 위치에 돌을 넣어줌
        for i in range(8):          # 8방향 탐색 시작
           for l in range(1, N):    # 많이 가봐야 N만큼 간다.
               nr, nc = r + dr[i] * l, c + dc[i] * l
               if 0 <= nr < N and 0 <= nc < N:
                   # 현재 위치의 델타가 내 돌이 아니고, 0이 아닌경우 (상대 돌이 있는 경우)
                   # 쭉 가면서 l이 증가한다.
                   if osero[nr][nc] != bw and osero[nr][nc] != 0:
                       continue
                   # 그러다가 내 돌이 나타날 것이다.
                   elif osero[nr][nc] == bw:
                          # 그럼 그 사이를 내 돌로 바꿔준다.
                          for k in range(1, l):
                            osero[r + dr[i] * k][c + dc[i] * k] = bw
                          # 다 바꿧으면, 방향을 바꾼다.
                          break

    result =[0, 0]
    for i in range(N):
        for j in range(N):
            if osero[i][j] == 1:
                result[0] += 1
            elif osero[i][j] == 2:
                result[1] += 1

    print(f'#{tc+1}', *result)

 


후기

  • 돌을 놓는 순간 부터 8방향의 델타로 쭉 나아가며 확인을 한다.
  • 나의 의문점은 그냥 델타가 0이 아니고 내 돌이 아니면 바꾸기
  • 코드로 본다면, 
if osero[nr][nc] != bw and osero[nr][nc] != 0:
    osero[nr][nc] = bw
  • 이렇게 짜면 왜 틀리다고 나오냐 였다.
  • 그 이유는, 다른돌을 쭉 타고 가다가 내 돌이 나와야 그 돌들을 바꿔야 한다는 것이다.
  • 당연한 게임의 규칙인데, 오셀로를 안해봐서 생각을 못했던 것 같다.

'SWEA' 카테고리의 다른 글

SWEA 2117 홈 방범 서비스 (파이썬)  (0) 2022.09.16
SWEA 1861 정사각형 방 (파이썬)  (0) 2022.09.16
SWEA 5177 이진 힙 (파이썬)  (0) 2022.09.15
SWEA 5178 노드의 합 (파이썬)  (0) 2022.09.15
SWEA 1232 사칙연산 (파이썬)  (0) 2022.09.15
복사했습니다!