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 |