-
[코테]99클럽 코테 스터디 22일차 TIL 백준 1018 체스판 다시 칠하기코딩테스트 2025. 2. 3. 20:59
테스트 크기를 보고 딱 브루트포스알고리즘이겠다~ 해서 전부 다 탐색하는걸로 풀었는데 좀 오래걸렸다... 더 예쁘고 효율적인 풀이도 공부해야겠다
풀이 순서는
- 8*8 윈도우 모두 구하기
- 정답 체스판 2가지 구현해놓기
- 3중 for문으로 모든 윈도우에 대하여 정답과 다른 문자 카운트하기
- 최솟값 구하기
인데, 조금 더 예쁜 풀이도 찾아보았다..
내풀이
import sys
read = sys.stdin.readlineN, M = map(int,read().split())chess_map = []for _ in range(N):chess_map.append(read().rstrip())
windows = []for i in range(N-7):window_xs = chess_map[i:i+8]for j in range(M-7):window = [w[j:j+8] for w in window_xs]windows.append(window)
answer1 = []for i in range(8):if i % 2 == 0:answer1.append('WBWBWBWB')else:answer1.append('BWBWBWBW')answer2 = []for i in range(8):if i % 2 == 0:answer2.append('BWBWBWBW')else:answer2.append('WBWBWBWB')
result = sys.maxsizefor window in windows:cnt_1 = 0cnt_2 = 0for i in range(8):for j in range(8):if window[i][j] != answer1[i][j]:cnt_1 += 1if window[i][j] != answer2[i][j]:cnt_2 += 1result = min(cnt_1,cnt_2,result)print(result)예쁜 풀이
import sys
def min_paint(chessboard, x, y):# 체스판 패턴 2가지 생성pattern1 = [ "BWBWBWBW", "WBWBWBWB" ] * 4pattern2 = [ "WBWBWBWB", "BWBWBWBW" ] * 4
count1, count2 = 0, 0for i in range(8):for j in range(8):if chessboard[x + i][y + j] != pattern1[i][j]:count1 += 1if chessboard[x + i][y + j] != pattern2[i][j]:count2 += 1
return min(count1, count2)
def solution():n, m = map(int, sys.stdin.readline().split())board = [sys.stdin.readline().strip() for _ in range(n)]
min_changes = float('inf')for i in range(n - 7):for j in range(m - 7):min_changes = min(min_changes, min_paint(board, i, j))
print(min_changes)'코딩테스트' 카테고리의 다른 글
[코테]99클럽 코테 스터디 36일차 TIL 백준 1003 피보나치 함수 (0) 2025.02.17 [코테]99클럽 코테 스터디 24일차 TIL 백준 2529 부등호 (0) 2025.02.06 [코테]백준 17144 미세먼지 안녕! 파이썬 (0) 2025.02.02 [코테]백준 9012 괄호 파이썬 (0) 2025.02.02 [코테]백준 1913 달팽이 파이썬 (0) 2025.01.31