Post

[백준/C++] 1895번: 필터

[백준/C++] 1895번: 필터

문제&링크

https://www.acmicpc.net/problem/1895

풀이

  1. 전체 이미지를 확인해야 하기에 완전 탐색을 사용한다.

  2. 필터의 크기가 3 x 3이기에 필터의 사각형의 왼쪽 위를 기준으로 두고 반복문을 사용한다. 즉 R과 C의 크기 -2까지 반복문 사용한다.

  3. 해당 필터 내에 있는 모든 값을 벡터 V에 삽입한다.

  4. 필터에 대한 반복문이 끝날 때 벡터 V를 오름차순으로 sort하고, 중간 값인 네 번째 인덱스를 벡터 ans에 삽입한다.

  5. 이미지의 모든 부분에 대해 필터를 씌우고 난 후 모아진 벡터 ans에 대해서 입력한 값 T보다 큰지 작은지 판단 후 정답인 cnt를 구한다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int img[41][41];
vector<int> ans;

int main() {
    int R, C;
    int T;
    cin >> R >> C;
    for (int i = 1; i <= R; i++) {
        for (int j = 1; j <= C; j++) {
            cin >> img[i][j];
        }
    }
    cin >> T;
    
    for (int i = 1; i <= R - 2; i++) {
        for (int j = 1; j <= C - 2; j++) {
            vector<int> V;
            for (int k = 0; k < 3; k++) {
                for (int l = 0; l < 3; l++) {
                    V.push_back(img[k + i][l + j]);
                    
                }
            }
            sort(V.begin(), V.end());
            ans.push_back(V[4]);            
        }
    }
    int cnt = 0;
    for (int i = 0; i < ans.size(); i++) {
        if (ans[i] >= T) cnt++;
    }
    
    cout << cnt;
}
This post is licensed under CC BY 4.0 by the author.