https://www.acmicpc.net/problem/1018
행렬 헷갈리지말기
2차원 배열 행렬 읿력하기
# 행렬 입력
n, m = map(int, input().split())
# 2차원 배열 입력
board = [list(map(str, input().split()))for _ in range(m)]
아래 순서로 문제를 풀었다.
# 보드에서 8x8 판 부분 정하기 (n-8)x(m-8)
# 정한 부분에서 검정 시작, 흰색 시작 두 가지 경우로 나누기 x2
# 8x8 모두 스캔해서 고쳐할 부분 찾기 x(8x8)
그리고 참고한 블로그
2차원 배열 슬라이싱은 어떻게 하는 가?
https://programming119.tistory.com/169
보드에서 8x8 판 부분 정하기 (n-8)x(m-8)
2차원 배열 슬라이싱
'''
n(행) x m(열) 행렬을 빼낼 때
i = row(행)의 인덱스
j = column(열)의 인덱스
[row[j : j + m] for row in field[i : i + n]
'''
print("len(board): ", len(board), len(board[0]))
for i in range(len(board) - n):
for j in range(len(board[i]) - m):
print("추출")
# 8x8 리스트 추출
mylist = [row[j : j + m] for row in board[i : i + n]]
for line in mylist:
print(line)
내가 푼 풀이( 정답 )
# BOJ_1018
# 보드에서 8x8 판 부분 정하기 (n-8)x(m-8)
# 정한 부분에서 검정 시작, 흰색 시작 두 가지 경우로 나누기 x2
# 8x8 모두 스캔해서 고쳐할 부분 찾기 x(8x8)
# 행렬 입력
n, m = map(int, input().split())
# 2차원 배열 입력
# board = [list(map(str, input().split()))for _ in range(n)]
board = [['0' for j in range(m)] for i in range(n)]
for i in range(n):
line = list(input())
for j in range(m):
board[i][j] = line[j]
change = 0
min = 64 # 8x8
# # 보드에서 8x8 판 부분 정하기 (n-8)x(m-8)
# print("len(board): ", len(board), len(board[0]))
for r in range(len(board) - 8 + 1):
for c in range(len(board[r]) - 8 + 1):
# 8x8 리스트 추출
myBoard = [row[c : c + 8] for row in board[r : r + 8]]
# print(myBoard)
# 정한 부분에서 검정 시작, 흰색 시작 두 가지 경우로 나누기 x2
for color in range(2):
change = 0
for i in range(8):
for j in range(8):
if color == 0: # 흰색으로 시작
# (짝수, 홀수) 조합이면 블랙이어야 함
if (i % 2 == 0 and j % 2 == 1) or (i % 2 == 1 and j % 2 == 0):
# 8x8 모두 스캔해서 고쳐할 부분 찾기 x(8x8)
if myBoard[i][j] == 'W':
change += 1
else: # (짝, 짝) 이거나 (홀, 홀) 조합이면 화이트이어야 함
if myBoard[i][j] == 'B':
change += 1
else: # 검정으로 시작
# (짝수, 홀수) 조합이면 화이트이어야 함
if (i % 2 == 0 and j % 2 == 1) or (i % 2 == 1 and j % 2 == 0):
# 8x8 모두 스캔해서 고쳐할 부분 찾기 x(8x8)
if myBoard[i][j] == 'B':
change += 1
else: # (짝, 짝) 이거나 (홀, 홀) 조합이면 블랙이어야 함
if myBoard[i][j] == 'W':
change += 1
# print(change)
if change < min:
min = change
print(min)
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 2108번 통계학, 중앙값: 인덱스 조심(반올림 말고 내림) (0) | 2023.01.07 |
---|---|
[백준] 1929번 소수 구하기, 실버3, python (0) | 2023.01.07 |
[백준] 1920번 수 찾기, python (0) | 2023.01.06 |
[백준] 나이순 정렬 10814, python (0) | 2023.01.06 |
[백준] 2920번 음계, python (0) | 2023.01.06 |