문제요약
나의 코드 및 설명
n, m = map(int,input().split()) #n:세로 m:가로
board = [list(input()) for _ in range(n)]
min_cnt = 64
for i in range(n-8+1): #그리드를 이동하면서 체스판 분석 (세로)
for j in range(m-8+1): #그리드를 이동하면서 체스판 분석 (가로)
temp_board = [] #임시 체스판
for k in range(i,8+i):
temp_board.append(board[k][j:j+8])
wcnt = 0 #첫번째 체스판 칸이 w일 경우
for a in range(8):
for b in range(8):
#정상적으로 말이 놓여진 경우들
if (a%2 == 0 and b%2 == 0 and temp_board[a][b] == "W") or \
(a%2 == 0 and b%2 == 1 and temp_board[a][b] == "B") or \
(a%2 == 1 and b%2 == 0 and temp_board[a][b] == "B") or\
(a%2 == 1 and b%2 == 1 and temp_board[a][b] == "W"):
continue #통과
#그렇지 않다면, 비정상적으로 말이 놓여진 경우이고 바꿔줘야됨. -> 카운트
else:
wcnt += 1
bcnt = 0 #첫번째 체스판 칸이 b일 경우
for a in range(8):
for b in range(8):
#정상적으로 말이 놓여진 경우들
if (a%2 == 0 and b%2 == 0 and temp_board[a][b] == "B") or \
(a%2 == 0 and b%2 == 1 and temp_board[a][b] == "W") or \
(a%2 == 1 and b%2 == 0 and temp_board[a][b] == "W") or\
(a%2 == 1 and b%2 == 1 and temp_board[a][b] == "B"):
continue #통과
#그렇지 않다면, 비정상적으로 말이 놓여진 경우이고 바꿔줘야됨. -> 카운트
else:
bcnt += 1
#칠해야하는 체스판 칸수의 최소값을 구한다.
if min_cnt > min(wcnt,bcnt):
min_cnt = min(wcnt,bcnt)
print(min_cnt)
다른 코드 및 설명
n, m = map(int, input().split())
board = [list(input()) for _ in range(n)]
min_cnt = 64
for i in range(n-7):
for j in range(n-7):
w_cnt = 0 #w로 시작
b_cnt = 0 #b로 시작
for a in range(a, a+8):
for b in range(b, b+8):
if (a+b)%2 == 0:
if board[a][b] != "W": #x,y가 짝수인 좌표 값이 B일 경우 따로 비교
w_cnt += 1 #w로 시작할 경우 -> 추가 카운트
else: #x,y가 짝수인 좌표 값이 W일 경우 따로 비교
b_cnt += 1 #b로 시작할 경우 -> 추가 카운트
else:
if board[a][b] != "W": #x,y가 홀수인 좌표 값이 B일 경우 따로 비교
b_cnt += 1 #b로 시작할 경우 -> 추가 카운트
else: #x,y가 홀수인 좌표 값이 W일 경우 따로 비교
w_cnt += 1 #w로 시작할 경우 -> 추가 카운트
if min_cnt > min(w_cnt, b_cnt):
min_cnt = min(w_cnt, b_cnt)
print(min_cnt)
피드백
몇 달전 풀어보려고 시도했다가 풀지 못한 문제이지만, 다시 풀어보고 정답 판정을 받을 수 있었다. 조금 무식하게 풀긴 했지만, 내가 작성한 코드가 이해하기에는 더 쉽다. 내가 작성한 코드 덕분에, 다른 코드도 잘 이해할 수 있었다. 첫번째 칸이 W일 경우, B일 때 경우의 카운트 값을 저장할 변수를 각각 두고, 첫번째 칸에 오는 색의 정보를 기준으로 (x,y) 좌표의 색이 정상적인 색이 아닐 경우 카운트 해주는 식으로 문제를 해결했다.
'Baekjoon' 카테고리의 다른 글
[백준] 1213 팰린드롬 만들기 (실버3) (1) | 2023.05.16 |
---|---|
[백준] 11650 좌표 정렬하기 (실버5) / key = lambda x: ~ (0) | 2023.05.09 |
[백준] 13413 오셀로 재배치 (실버4) (0) | 2023.05.07 |
[백준] 1181 단어 정렬 (실버5) / key = lambda x: ~ (0) | 2023.05.07 |
[백준] 1251 단어 나누기 (실버5) / 문자열 (0) | 2023.04.28 |