Skip to content

Commit

Permalink
[Silver IV] Title: 필터, Time: 36 ms, Memory: 33240 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
Youn-Rha committed Jun 18, 2024
1 parent 3a5b7e5 commit f207bd0
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
50 changes: 50 additions & 0 deletions 백준/Silver/1895. 필터/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# [Silver IV] 필터 - 1895

[문제 링크](https://www.acmicpc.net/problem/1895)

### 성능 요약

메모리: 33240 KB, 시간: 36 ms

### 분류

브루트포스 알고리즘, 구현, 정렬

### 제출 일자

2024년 6월 18일 19:58:01

### 문제 설명

<p>숫자 9개가 오름차순이나 내림차순으로 정렬되어 있을 때, 중앙값은 다섯 번째 숫자이다. 예를 들어, 1, 3, 4, 1, 2, 6, 8, 4, 10의 중앙값은 4이다. (1 ≤ 1 ≤ 2 ≤ 3 ≤ 4 ≤ 4 ≤ 6 ≤ 8 ≤ 10)</p>

<p>이미지 I는 크기가 R × C인 2차원 픽셀이다. (3 ≤ R ≤ 40, 3 ≤ C ≤ 40) 각 픽셀은 어두운 정도 V를 나타낸다. (0 ≤ V ≤ 255)</p>

<p>중앙 필터는 이미지에 있는 노이즈를 제거하는 필터이다. 필터의 크기는 3 × 3이고, 이미지의 중앙값을 찾으면서 잡음을 제거한다.</p>

<p>예를 들어, 아래와 같은 6 × 5 이미지가 있다.</p>

<p><img alt="" src="https://www.acmicpc.net/upload/images/filter1.gif" style="height:160px; width:200px"></p>

<p>필터링된 이미지의 크기는 4 × 3이고, 아래와 같다.</p>

<p><img alt="" src="https://www.acmicpc.net/upload/images/filter2.gif" style="height:110px; width:150px"></p>

<p>가장 왼쪽 윗 행에 필터를 두고, 오른쪽으로 움직이면서 중앙값을 찾는다. 한 행을 모두 이동했으면, 다음 행으로 이동해 다시 중앙값을 찾는다. 아래와 같은 순서를 가진다.</p>

<p><img alt="" src="https://www.acmicpc.net/upload/images/filter3.gif" style="height:160px; width:460px"></p>

<p>위의 그림에서 각각의 중앙값은 36, 36, 21이 된다. 이 값은 필터링된 이미지 J의 첫 행과 같다. </p>

<p>이미지 I가 주어졌을 때, 필터링 된 이미지 J를 구하고, 값이 T보다 크거나 같은 픽셀의 수를 구하는 프로그램을 작성하시오.</p>

<p>예를 들어, T = 40일 때, 위의 예에서 정답은 7이다. </p>

### 입력

<p>첫째 줄에 이미지의 크기 R과 C가 주어진다. 그 다음 R개의 각 줄에는 C개의 픽셀 값이 주어진다. 마지막 줄에는 T값이 주어진다.</p>

### 출력

<p>첫째 줄에 필터링 된 이미지 J의 각 픽셀 값 중에서 T보다 크거나 같은 것의 개수를 출력한다.</p>

33 changes: 33 additions & 0 deletions 백준/Silver/1895. 필터/필터.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import sys, math


# sys.setrecursionlimit(100000)


def input():
return sys.stdin.readline()


def findCenter(x, y):
global cnt
lst = []
for i in range(x, x + 3):
for j in range(y, y + 3):
lst.append(images[i][j])
lst.sort()
if lst[4] >= T:
cnt += 1


# main
if __name__ == "__main__":
R, C = map(int, input().split())
images = []
for _ in range(R):
images.append(list(map(int, input().split())))
T = int(input())
cnt = 0
for i in range(R - 2):
for j in range(C - 2):
findCenter(i, j)
print(cnt)

0 comments on commit f207bd0

Please sign in to comment.