728x90
문제 설명
bCount는 파란색 색종이의 수를 뜻하고 wCount는 하얀색 색종이의 수를 뜻한다. arr은 전체 종이를 담을 배열이다. 재귀함수의 인자로 a와 b는 해당 색종이의 시작점을 뜻한다. 첫 색종이는 [0,0]부터 시작하니 a=0,b=0이 된다. 시작점인 a와 b부터 색을 비교하고 만약 색이 다를 경우 a와 b에 N//2를 알맞게 더해 재귀함수를 다시 호출한다.
만약 이중for문을 통과할 경우에는 색종이의 색깔이 전부 같다는 뜻이므로 해당 색깔에 맞게 count를 늘려준다.
전체 코드
bCount = 0
wCount = 0
arr = []
def func(a,b,N):
global bCount
global wCount
if N == 1:
if arr[a][b] == 1:
bCount += 1
else:
wCount += 1
return 0
for i in range(a,a+N):
for j in range(b,b+N):
if arr[i][j] != arr[a][b]:
func(a,b,N//2)
func(a,b+N//2,N//2)
func(a+N//2,b,N//2)
func(a+N//2,b+N//2,N//2)
return 0
if arr[a][b] == 1:
bCount += 1
else:
wCount += 1
return 0
def main():
global bCount
global wCount
num = int(input())
tmp = num
while tmp:
plist = list(map(int,input().split()))
arr.append(plist)
tmp -= 1
func(0,0,num)
print(wCount)
print(bCount)
if __name__ == "__main__":
main()
728x90
반응형
'코딩테스트 > 파이썬' 카테고리의 다른 글
백준 9663번 N-Queen (0) | 2021.02.02 |
---|---|
백준 1780번 종이의 개수 (0) | 2021.02.01 |
백준 11729번 하노이 탑 이동 순서 (0) | 2021.01.30 |
백준 17478번 재귀함수가 뭔가요? (0) | 2021.01.29 |
백준 1629번 곱셈 (0) | 2021.01.28 |