728x90
나의 풀이
def solution(arr):
answer = [0, 0]
n, k = len(arr), 1
while n > 0:
for x in range(k):
for y in range(k):
nx, ny = n * x, n * y
temp = arr[ny][nx]
if temp == -1:
continue
for i in range(nx, nx + n):
for j in range(ny, ny + n):
if temp != arr[j][i]:
break
else:
continue
break
else:
for i in range(nx, nx + n):
for j in range(ny, ny + n):
arr[j][i] = -1
answer[temp] += 1
n //= 2
k *= 2
return answer
재귀를 이용한 풀이
def solution(arr):
answer = [0, 0]
def check(size, x, y):
if size == 1:
answer[arr[y][x]] += 1
return
else:
first = arr[y][x]
for dy in range(size):
for dx in range(size):
if first != arr[y + dy][x + dx]:
check(size // 2, x, y)
check(size // 2, x + size // 2, y)
check(size // 2, x, y + size // 2)
check(size // 2, x + size // 2, y + size // 2)
return
answer[first] += 1
check(len(arr),0,0)
return answer
numpy를 활용한 풀이
import numpy as np
def solution(arr):
# 재귀함수 구현
def fn(a):
if np.all(a == 0): return np.array([1, 0])
if np.all(a == 1): return np.array([0, 1])
n = a.shape[0]//2
return fn(a[:n, :n]) + fn(a[n:, :n]) + fn(a[:n, n:]) + fn(a[n:, n:])
# 결과 리턴
return fn(np.array(arr)).tolist()
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/파이썬] [3차] 방금그곡 (0) | 2022.06.18 |
---|---|
[프로그래머스/파이썬] 방문 길이 (0) | 2022.06.18 |
[프로그래머스/파이썬] n^2 배열 자르기 (0) | 2022.06.17 |
[프로그래머스/파이썬] 3 x n 타일링 (0) | 2022.06.17 |
[프로그래머스/파이썬] 점프와 순간 이동 (0) | 2022.06.17 |