또 뭐하지
백준 1018번 체스판 다시 칠하기 본문
728x90
진짜.. 오래걸렸다.
숫자로 변환해서 푸는 문제도 고민해봤는데 실패하고, 하나하나 비교하는 코드를 짜자니 막막했다.
문제에서 '이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다'라는 부분을 힌트 삼아서 풀었다.
먼저 가능한 두 가지 경우의 2차원 배열을 미리 저장해두고,
입력받은 문자열을 2차원 배열로 받아와서,
8*8 크기로 잘라가면서 위의 가능한 두 가지 경우에 대해서 비교를 하였다.
각 경우별로 다른 원소의 개수를 세어 result 배열에 저장해둔 후 제일 작은 값을 출력하는 방식으로 답을 얻었다.
N, M = map(int, input().split())
board = []
case1 = [['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B']]
case2 = [['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W']]
for _ in range(N):
board.append(list(input()[:M]))
result = []
for i in range(N - 7):
for j in range(M - 7):
tmp = [row[j:j + 8] for row in board[i:i + 8]] # 입력받은 보드를 8*8 크기로 자름
cnt1 = 0
cnt2 = 0
for p in range(8):
for q in range(8):
if tmp[p][q] != case1[p][q]: # case1과 비교
cnt1 += 1
if tmp[p][q] != case2[p][q]: # case2과 비교
cnt2 += 1
result.append(cnt1)
result.append(cnt2)
print(min(result)) # 가능한 result 중 가장 작은 값을 출력
다른 코드들도 살펴봤는데 하나하나 비교하는 코드 말고는 이해가 안됨.. ㅠ
'Study > Coding Test' 카테고리의 다른 글
백준 2164번 카드2 (0) | 2024.11.22 |
---|---|
백준 1920번 수 찾기 (0) | 2024.11.21 |
백준 11650번 좌표 정렬하기 (0) | 2024.11.21 |
백준 10814번 나이순 정렬 (0) | 2024.11.20 |
백준 7568번 덩치 (0) | 2024.11.20 |