SSAFY/SWEA

[SWEA] #14413. 격자판 칠하기_파이썬

728x90
반응형

풀기 전 생각해보기😮

  • 체크 배열의 특징 이용하기

풀이🛫

T = int(input())
for t in range(T):
    N, M = map(int, input().split())
    arr = [list(input()) for _ in range(N)]
    board = [0, 0, 0, 0]
    
    for col in range(N):
        for row in range(M):
            if arr[col][row] == '#':
                if (col+row) % 2 == 0:
                    board[0] += 1
                elif (col+row) % 2 == 1:
                    board[1] += 1
            elif arr[col][row] == '.':
                if (col + row) % 2 == 0:
                    board[2] += 1
                elif (col + row) % 2 == 1:
                    board[3] += 1

    if (board[0] and board[1]) or (board[2] and board[3]) or (board[0] and board[2]) or (board[1] and board[3]):
        answer = 'impossible'
    else:
        answer = 'possible'
        
    print(f"#{t+1}", answer)

 

핵심 정리🎁

  • board 리스트의 0번, 1번, 2번, 3번 원소는 각각
    '#'의 인덱스합(x, y 좌표 합)이 짝수일 경우,
    '#'의 인덱스합(x, y 좌표 합)이 홀수일 경우,
    '.'의 인덱스합(x, y 좌표 합)이 짝수일 경우,
    '.'의 인덱스합(x, y 좌표 합)이 홀수일 경우 로 두었다.
  • board 리스트의 0번과 1번이 같이 존재하거나, 0번과 2번이 같이 존재할 때 impossible에 해당하고,
    board 리스트의 2번과 3번이 같이 존재하거나, 1번과 3번이 같이 존재할 때 impossible에 해당한다.
  • 이외의 경우는 possible을 출력하도록 설정하였다.

 

후기 😎

  • 체스판 문제에서도 인덱스의 합을 이용하는 방법을 사용했었는데, 같은 원리의 문제였기 때문에 동일한 원리를 적용해볼 수 있었다. 앞으로도 유용하게 써먹자. 

 

 

 

'SSAFY > SWEA' 카테고리의 다른 글

[SWEA] #10989. 폭격 작전_파이썬  (0) 2022.08.23
[SWEA] #4866. 괄호 검사_파이썬  (0) 2022.08.17
[SWEA] #1216. 회문 2_파이썬  (0) 2022.08.16
[SWEA] #4861. 회문_파이썬  (0) 2022.08.16
[SWEA] #12712. 파리퇴치3_파이썬  (0) 2022.08.16