프로그래머스 쿼드압축 후 개수 세기 파이썬
2024. 7. 15. 14:48ㆍ알고리즘문제 풀이/프로그래머스
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/68936
풀이
먼저, 이차원배열을 배열로 변환한다.
그 후 dfs를 이용하여 탐색한다.
minimize 압축함수 (=dfs함수)
i)
arr의 전체 원소가 모두 0이거나 1이면
그 원소에 해당하는 개수를 1 더해준다.
ii)
arr의 원소가 4이면
0의 갯수, 1의 갯수를 각각 더해준다.
i),ii)에 해당하지 않는 경우
arr을 4개 영역으로 분리한다.
그리고 4개의 영역을 각각 탐색한다.
전체 코드
def solution(arr):
def minimize(arr):
n = len(arr)
if arr.count(arr[0]) == n:
ans[arr[0]] += 1
return
if n == 4:
ans[0] += arr.count(0)
ans[1] += arr.count(1)
return
arr1 = []
arr2 = []
arr3 = []
arr4 = []
m = int(n ** (1/2))
for i in range(n):
if i < n//2:
if i % m < m // 2:
arr1.append(arr[i])
else:
arr2.append(arr[i])
else:
if i % m < m // 2:
arr3.append(arr[i])
else:
arr4.append(arr[i])
minimize(arr1)
minimize(arr2)
minimize(arr3)
minimize(arr4)
ans = [0,0]
if len(arr) == 1:
ans[arr[0][0]] = 1
return ans
arrx = []
n = len(arr)
for i in range(n):
for j in range(n):
arrx.append(arr[i][j])
minimize(arrx)
return ans
'알고리즘문제 풀이 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 택배상자 파이썬(python) (0) | 2024.07.15 |
|---|---|
| 프로그래머스 Lv.2 카펫 파이썬 (0) | 2024.07.10 |
| 프로그래머스 Lv.1 최소직사각형 파이썬 (0) | 2024.07.10 |
| 프로그래머스 Lv.2 H-Index 파이썬 (0) | 2024.07.10 |
| 프로그래머스 Lv.3 디스크 컨트롤러 파이썬(Python) (0) | 2024.07.10 |