https://www.acmicpc.net/problem/1895
문제 분석
RxC 크기인 이미지 배열(=I)를 입력 받고, 3x3 배열의 필터를 씌여서 중앙값을 찾는 문제이다.
필 터를 씌어서 찾은 중앙값들을 정렬한 뒤, T 값 보다 큰 숫자들의 개수를 새는 문제이다.
코드
ㅋ
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
41
42
43
44
45
46
47
48
49
|
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int I[45][45];
int abc(int yy, int xx)
{
vector<int>v2;
for(int y=0; y<=2; y++)
{
for(int x=0; x<=2; x++)
{
v2.push_back(I[yy+y][xx+x]);
}
}
sort(v2.begin(),v2.end());
return v2[4];
}
int main()
{
int R,C,T;
cin >> R >> C;
for(int y=0; y < R; y++)
{
for(int x=0; x < C; x++)
{
cin >> I[y][x];
}
}
cin>>T;
int cnt=0;
vector<int>v;
for(int y=0; y < R - 2; y++)
{
for(int x=0; x < C - 2; x++)
{
int ret=abc(y,x);
cnt+=(ret>=T);
}
}
cout << cnt;
return 0;
}
|
cs |
문제 풀이
1. 배열 I를 위해, R,C 그리고 I를 입력 받는다 .
2. 기준 값 T를 입력받고, T보다 큰 값의 개수를 새기 위해 cnt를 정의해 준다.
3. 3x3 필터를 씌워서 abc()함수로 보낸다. abc함수에서는 필터 속 중앙값을 반환해 주며, 그 값이 T 보다 클 경우 cnt에 더해준다.
3-1. abc() 함수에, 필터의 첫범위인 y값과 x값을 넘겨준다. 그 다음 3x3 크기의 2중 for문을 돌려 v2에 push_back() 해준다. 9개를 다 넣은 후, 오름차순으로 정렬해 준 뒤, 중앙값인 v2[4]를 반환 해준다.
'Koala - 7기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 16395번 파스칼의 삼각형 (0) | 2022.07.17 |
---|---|
[백준/Python] 11726번 2xn 타일링 (0) | 2022.07.17 |
[백준/Python] 17626번 Four Squares (0) | 2022.07.17 |
[백준 / Python] 1463번 1로 만들기 (0) | 2022.07.16 |
[BOJ / Python] 1149 - RGB거리 (0) | 2022.07.15 |