728x90
문제 설명
count_1은 -1로만 채워진 종이의 개수, count0은 0로만 채워진 종이의 개수, count1은 1로만 채워진 종이의 개수를 뜻한다. count_1,count0,count1을 전역변수로 선언하고 재귀함수의 인자로는 검사할 배열의 시작점 (a,b)와 종이의 길이 N을 넣어준다. (a,b)부터 시작하여 이중for문을 사용하여 종이를 확인하고 만약 해당 위치의 종이와 시작점 (a,b)의 종이와 다르다면 배열을 9등분하여 재귀함수를 호출한다.
이중for문을 통과하면 해당 종이는 모두 같은 종이로 되어있음을 뜻하므로 종이의 종류에 맞게 개수를 더해준다.
전체 코드
count_1 = 0
count0 = 0
count1 = 0
arr = []
def func(a,b,N):
global count_1
global count0
global count1
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//3)
func(a,b+N//3,N//3)
func(a,b+N*2//3,N//3)
func(a+N//3,b,N//3)
func(a+N//3,b+N//3,N//3)
func(a+N//3,b+N*2//3,N//3)
func(a+N*2//3,b,N//3)
func(a+N*2//3,b+N//3,N//3)
func(a+N*2//3,b+N*2//3,N//3)
return
if arr[a][b] == -1:
count_1 += 1
elif arr[a][b] == 0:
count0 += 1
else:
count1 += 1
return
def main():
global count_1
global count0
global count1
num = int(input())
tmp = num
while tmp:
plist = list(map(int,input().split()))
arr.append(plist)
tmp -= 1
func(0,0,num)
print(count_1)
print(count0)
print(count1)
if __name__ == "__main__":
main()
728x90
반응형
'코딩테스트 > 파이썬' 카테고리의 다른 글
백준 1182번 부분수열의 합 (0) | 2021.02.03 |
---|---|
백준 9663번 N-Queen (0) | 2021.02.02 |
백준 2630번 색종이 만들기 (0) | 2021.01.31 |
백준 11729번 하노이 탑 이동 순서 (0) | 2021.01.30 |
백준 17478번 재귀함수가 뭔가요? (0) | 2021.01.29 |