import sys
def div_conq(x, y, n):
global count_white, count_blue, count_fcn
count_fcn += 1
now_color = paper[x][y]
for i in range(x, x+n):
for j in range(y, y+n):
if now_color != paper[i][j]:
half_n = n//2
div_conq(x, y, half_n)
div_conq(x + half_n, y, half_n)
div_conq(x, y + half_n, half_n)
div_conq(x + half_n, y + half_n, half_n)
return
if now_color == 0:
count_white += 1
else:
count_blue += 1
if __name__ == '__main__':
N = int(sys.stdin.readline().rstrip())
paper = list()
for _ in range(N):
paper.append(list(map(int, sys.stdin.readline().rstrip().split())))
count_white, count_blue, count_fcn = 0, 0, 0
div_conq(0, 0, N)
print(count_white, count_blue, sep='\n')
print(count_fcn)
2630 색종이 만들기 문제 풀이 보면서 짜고 공부중인데 파이썬 스코프가 도최 감이 안와
일반 변수는 global 설정해야 함수에서 접근되는데 왜 list는 그런거 없이 그냥 되는건지 모르겠어
객체와 mutable 과 immutable 의 차이를 알아야하는데 list같은 경우는 값을 바꾸려고 하는 인덱싱이나 슬라이싱의 경우 객체를 재할당 하지 않고 바로 접근해서 값을 바꿀수 있음 이게 mutable 이고 immutable 같은 경우는 int,str등등이 있는데 예를 들어 a = 10이라고 쓰면 파이썬은 10이라는 객체를 생성하고 a가 그곳의 주소를 가르키는 형식임 그래서 10자체란 값은 바꿀수 없기 때문에 a+=1이라던가 a = 11 이라고 쓰면 11이라는 객체를 재할당해서 a에게 주소를 알려주는 식임 따라서 int값 같은 경우는 함수 내에서 global선언을 안 해주면 그값에 대해서 재할당해서 지역변수(함수 내부)안에 넣어주기 때문에 원본값(글로벌 변수)을 변경할수 없음
이해 하기 힘들면 그냥 리스트,딕셔너리,셋 같은 경우는 값 변경이 어디서든 가능하고 나머진 안되는구나 라고 알고있으셈
id() 함수는 그 객체가 가지고 있는 주소를 반환하는 함수인데 a = 10 하고 print(id(a)) 찍고 a += 1 하고 print(id(a)) 찍어보면 둘이 다른걸 알수 있음
immutable: 접근은 가능, 변경은 global 써줘야함 mutable: 접근, 변경 모두 가능 이렇게 알고있음
감사합니다 ㅠㅠ