222-풀링 - 17829
2025. 2. 12. 15:06ㆍPS/백준
문제
https://www.acmicpc.net/problem/17829
느낀점
4개를 고른 후, 두 번째 큰 값을 선택하는 로직까지는 그렇게 어렵지 않았는데, 그것을 어떻게 1/4크기의 행렬로 다시 배열할지에 대해 조금 고민했던 것 같다.
풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define pii pair<int, int>
int pooling(int i, int j, vector<vector<int>> &matrix, vector<pii> &direction)
{
vector<pair<int, pii>> temp;
for (int k = 0; k < 4; k++)
{
int ux = direction[k].first;
int uy = direction[k].second;
int dx = i + ux;
int dy = j + uy;
pii directionPair = make_pair(ux, uy);
temp.push_back(make_pair(matrix[dx][dy], directionPair));
}
sort(temp.begin(), temp.end(), [](pair<int, pii> &pa, pair<int, pii> &pb)
{ return pa.first < pb.first; });
return temp[2].first;
}
int main()
{
int N;
cin >> N;
vector<vector<int>> matrix(N, vector<int>(N));
vector<vector<int>> newMatrix(N / 2, vector<int>(N / 2));
vector<pair<int, int>> direction = {{0, 0}, {1, 0}, {0, 1}, {1, 1}};
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
int temp;
cin >> temp;
matrix[i][j] = temp;
}
}
while (N != 1)
{
vector<vector<int>> newMatrix(N / 2, vector<int>(N / 2));
for (int i = 0; i < N; i += 2)
{
for (int j = 0; j < N; j += 2)
{
int value = pooling(i, j, matrix, direction);
newMatrix[i / 2][j / 2] = value;
}
}
matrix = newMatrix;
N /= 2;
}
cout << matrix[0][0];
return 0;
}
'PS > 백준' 카테고리의 다른 글
오리 - 12933 (0) | 2025.02.12 |
---|---|
앵무새 - 14713 (0) | 2025.02.12 |
마인크래프트 - 18111 (0) | 2025.02.12 |
도키도키 간식드리미 - 12789 (0) | 2025.01.12 |
[백준] 14567 - 선수과목 (0) | 2024.08.16 |