https://www.acmicpc.net/problem/1018
문제분석
소스코드
import sys
N, M = map(int,input().split())
chess = []
result = []
for i in range(N):
chess.append(list(sys.stdin.readline().strip()))
for i in range(0,N-7):
for j in range(0,M-7):
count1 = 0
count2 = 0
for k in range(i, i+8):
for x in range(j, j+8):
if (k + x) % 2 == 0:
if chess[k][x] != 'B':
count1 += 1
else:
count2 += 1
else:
if chess[k][x] != 'W':
count1 += 1
else:
count2 += 1
result.append(min(count1, count2))
print(min(result))
문제풀이
처음 문제를 접할 당시에는, 단순하게 해당 칸에 W 혹은 B가 있으면 옆이나 아래에 같은 것이 오면 안된다는 방식으로 문제를 풀려 했으나, 여러가지 중복값이 발생한다는 것을 깨닫고 다른 방식으로 문제를 풀려 했으나 그리 쉽지는 않았다.
생각을 계속하다가 방법이 안나와 다른 코드는 어떤 방식으로 짰는지 참조를 해보았다. 4중 for문을 쓰는 방식까지는 같았으나, 잘못 칠해졌는지의 여부를 확인하는 방식이 달랐다.
해당 열에 어느 부분이 중복되었는지만 보는 것이 아니라 아에 처음부터 BWBW 혹은 WBWB 인지를 확인 한 후, 해당 열에서 잘못된 부분을 카운트 해주는 방식으로 최솟값을 구했다.
나중에 다시 풀어봐야 할거 같다.
참고자료:https://ittrue.tistory.com/60
'Koala - 10기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/JAVA] 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2023.03.12 |
---|---|
[백준/Python] 2839번 : 설탕 배달 (0) | 2023.03.09 |
[백준/C++] 2921번: 도미노 (0) | 2023.03.07 |
[백준/Python] 2193번 이친수 (0) | 2023.03.07 |
10기 기초 알고리즘 스터디 출석부 (0) | 2023.03.04 |