컵 모양의 2차 행렬의 모든 합이 가장 큰 것을 알아내라.
Context
Given a 2D Array, :
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
위와 같이 6x6 2차 행렬에서
a b c
d
e f g
컵모양 위치의 행렬 값들을 더해서 가장 큰 값을 알아 내는 것이다.
Constraints
예를들어,
Sample Input
1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0
2 4 4
0 0 0 0
2
0 0 0 0
1 2 4
0
Sample Output 출력값
19
파이썬3로 해봤다.
#!/bin/python3
import sys
#2차 배열 셋팅
arr = []
for arr_i in range(6):
arr_t = [int(arr_temp) for arr_temp in input().strip().split(' ')]
arr.append(arr_t)
#배열 합 더하는 함수
def conv(y, x, array):
result = 0
for i in range(y, y+3):
for j in range(x, x+3):
if i == (y+1) and (j == x or j == x+2): #컵모양 때문에 삽입
continue
else:
result += array[i][j]
return result
L = []
for i in range(4):
for j in range(4):
L.append(conv(i, j, arr))
L.sort(reverse=True)
print(L[0])
/* 생각 */
간단하게 컨볼루션의 기초적인 움직임을 구현할 수 었다.
9개의 방향으로 컵 모양을 내서 더했지만, 이것을 응용하여 이미지 filter를 만들 수 있겠다는 생각을 했다.
여기에 필터 곱만하면 컨볼루션이 되는 것이다.
'IT > [Everyday]Coding' 카테고리의 다른 글
이진트리 높이 탐색 (0) | 2018.02.20 |
---|---|
이진트리 모든 데이터 탐색 (0) | 2018.02.20 |
python 선택한 개수 만큼, 일정한 모양으로 출력 연습 (0) | 2016.08.11 |
데이터 스트럭쳐 선택 순서도 (1) | 2015.01.08 |
랜덤 포레스트 Random Forests (1) | 2014.12.22 |