2022 02 12
1. 틀린 기록
2. 원인 분석
- 다른 예제에서는 모두 올바른 출력이 나왔는데, 예제 입력 4에서 오류가 났다.
- 나는 시작하는 체스 판을 기준으로 구했는데, 그러면 안됐던 것이었다.
3. 해결
saero, garo = map(int, input().split())
lst = [] # 입력된 보드의 상태를 저장하는 리스트
errorStorage = [] # 몇 개의 원소를 고쳐야 하는지 저장하는 리스트 -> 나중에 min(errorStorage)
# 입력받기
for i in range(saero):
lst.append(input())
# 검토하기
for i in range(0, saero-7):
for j in range(0, garo-7):
count = 0
for y in range(i, i+8):
for x in range(j, j+8):
if (y-i) % 2 == 0:
if (x-j) % 2 == 0:
if lst[y][x] == 'B':
count += 1
else:
if lst[y][x] == 'W':
count += 1
else:
if (x-j) % 2 == 0:
if lst[y][x] == 'W':
count += 1
else:
if lst[y][x] == 'B':
count += 1
errorStorage.append(count)
count = 0
for y in range(i, i+8):
for x in range(j, j+8):
if (y-i) % 2 == 0:
if (x-j) % 2 == 0:
if lst[y][x] == 'W':
count += 1
else:
if lst[y][x] == 'B':
count += 1
else:
if (x-j) % 2 == 0:
if lst[y][x] == 'B':
count += 1
else:
if lst[y][x] == 'W':
count += 1
errorStorage.append(count)
print(min(errorStorage))
- 그래서 맨 처음 시작하는 원소가 'W'인 경우와 'B'인 경우를 나눠서 구하지 않고, 둘 다 구해서 최솟값을 구하도록 코드를 짰다.
4. 배운 점
- 배열의 인덱스 간의 연산으로 더 간단한 식을 만들 수 있다.
- 기준을 잘 세우되, 그 기준도 올바른 기준인지를 다시 꼭!!! 확인하자.
'[ 알고리즘 ] > 오답노트' 카테고리의 다른 글
[ BOJ 오답노트 ] 2751 파이썬 : 수 정렬하기 2 (0) | 2022.02.16 |
---|---|
[ BOJ 오답노트 ] 1436 파이썬 : 영화감독 숌 (0) | 2022.02.15 |
[ BOJ 오답노트 ] 2231 파이썬 : 분해합 (0) | 2022.02.07 |
[ BOJ 오답노트 ] 1929 파이썬 : 소수 구하기 (0) | 2022.01.29 |
[ BOJ 오답노트 ] 2869 파이썬 : 달팽이는 올라가고 싶다 (0) | 2022.01.28 |