222-풀링 - 17829

2025. 2. 12. 15:06PS/백준

문제

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