알고리즘 스터디
[백준] 17829번 : 222-풀링 - Python(파이썬)
히치키치
2021. 3. 22. 10:37
17829번: 222-풀링
조기 졸업을 꿈꾸는 종욱이는 요즘 핫한 딥러닝을 공부하던 중, 이미지 처리에 흔히 쓰이는 합성곱 신경망(Convolutional Neural Network, CNN)의 풀링 연산에 영감을 받아 자신만의 풀링을 만들고 이를 22
www.acmicpc.net
풀이
- 분할 정복
- 인덱싱으로 나눠 재귀적으로 구현하는 것이 포인트
코드
# 문제 : https://www.acmicpc.net/problem/17829
import sys
input=sys.stdin.readline
def pooling(array,n):
if n==1:
return array[0][0]
else:
new_=[[] for _ in range(n//2)]
for i in range(0,n,2):
for j in range(0,n,2):
new_[i//2].append(sorted([array[i][j],array[i+1][j],array[i][j+1],array[i+1][j+1]])[2])
return pooling(new_,n//2)
N=int(input())
array=[list(map(int,input().split())) for _ in range(N)]
print(pooling(array,N))
헷갈렸던 점
#(1)여러줄 입력받고 한줄씩 리스트로 묶어 2차원 리스트로 저장
array=[list(map(int,input().split())) for _ in range(N)]
#(2)sorted([리스트])[X] : 리스트의 요소를 내림차순으로 나열하고 X번째 수
#(3)새로 생기는 사이즈 축소된 배열 : row잡고 거기에 요소 한개씩 추가
for i in range(0,n,2):
for j in range(0,n,2):
new_[i//2].append(sorted([array[i][j],array[i+1][j],array[i][j+1],array[i+1][j+1]])[2])