https://www.acmicpc.net/problem/17829
17829번: 222-풀링
조기 졸업을 꿈꾸는 종욱이는 요즘 핫한 딥러닝을 공부하던 중, 이미지 처리에 흔히 쓰이는 합성곱 신경망(Convolutional Neural Network, CNN)의 풀링 연산에 영감을 받아 자신만의 풀링을 만들고 이를 22
www.acmicpc.net
다음과 같이 2x2의 크기 중에서 두 번째로 큰 숫자를 골라서 새로운 행렬을 만드는 것을 반복한다.
행렬의 크기가 1이 되기 전까지.
풀이
1. 2중 for문으로 크기가 4인 행렬을 차례대로 방문해준다.
2. 크기가 4인 행렬 중에서 두 번째로 큰 숫자를 찾아 준다. 크기가 4인 행렬의 왼쪽 상단 지점을 기준으로 x,y좌표가 절반인 행렬의 위치에 두 번째로 큰 숫자를 넣는다.
3. 위를 행렬의 크기가 1이 될 때 까지 반복하고 행렬의 0,0을 반환한다.
#include<iostream>
using namespace std;
int N;
int matrix[1025][1025];
int half;
//void pooling(int n,int y,int x)
//{
// if (n == 2)
// {
//
// }
// else
// {
// half = n / 2;
// pooling(n / 2, y, x);
// pooling(n / 2, y, x + half);
// pooling(n / 2, y + half, x);
// pooling(n / 2, y + half, x + half);
//
// }
//}
void pooling(int y, int x)
{
int max = -100000;//matrix[y][x];
int second = max;
for(int i=y;i<y+2;i++)
for (int j = x; j < x+2; j++)
{
if (matrix[i][j] > max)
{
second = max;
max = matrix[i][j];
}
else
{
if (matrix[i][j] > second)
second = matrix[i][j];
}
}
matrix[y / 2][x / 2] = second;
}
int main()
{
cin >> N;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> matrix[i][j];
while (N)
{
for (int i = 0; i < N; i += 2)
for (int j = 0; j < N; j+=2)
{
pooling(i, j);
}
N /= 2;
}
cout << matrix[0][0];
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 3980 선발 명단 c++ (0) | 2023.01.07 |
---|---|
[백준] 22252 정보 상인 호석 c++ (0) | 2023.01.05 |
[백준] 2502 떡 먹는 호랑이 c++ (0) | 2023.01.02 |
[백준] 1707 이분 그래프 C++ (0) | 2022.12.29 |
[백준] 14503 로봇 청소기 C++ (0) | 2022.12.29 |