츄르사려고 코딩하는 코집사입니다.
1. [백준 알고리즘] 백준 1895번 필터 파이썬(Python)
1) 문제번호 : 1895번
2) 문제 출처
https://www.acmicpc.net/problem/1895
2. 문제
숫자 9개가 오름차순이나 내림차순으로 정렬되어 있을 때, 중앙값은 다섯 번째 숫자이다. 예를 들어, 1, 3, 4, 1, 2, 6, 8, 4, 10의 중앙값은 4이다. (1 ≤ 1 ≤ 2 ≤ 3 ≤ 4 ≤ 4 ≤ 6 ≤ 8 ≤ 10)
이미지 I는 크기가 R × C인 2차원 픽셀이다. (3 ≤ R ≤ 40, 3 ≤ C ≤ 40) 각 픽셀은 어두운 정도 V를 나타낸다. (0 ≤ V ≤ 255)
중앙 필터는 이미지에 있는 노이즈를 제거하는 필터이다. 필터의 크기는 3 × 3이고, 이미지의 중앙값을 찾으면서 잡음을 제거한다.
예를 들어, 아래와 같은 6 × 5 이미지가 있다.
필터링된 이미지의 크기는 4 × 3이고, 아래와 같다.
가장 왼쪽 윗 행에 필터를 두고, 오른쪽으로 움직이면서 중앙값을 찾는다. 한 행을 모두 이동했으면, 다음 행으로 이동해 다시 중앙값을 찾는다. 아래와 같은 순서를 가진다.
위의 그림에서 각각의 중앙값은 36, 36, 21이 된다. 이 값은 필터링된 이미지 J의 첫 행과 같다.
이미지 I가 주어졌을 때, 필터링 된 이미지 J를 구하고, 값이 T보다 크거나 같은 픽셀의 수를 구하는 프로그램을 작성하시오.
예를 들어, T = 40일 때, 위의 예에서 정답은 7이다.
3. 제약사항
4. 입력
첫째 줄에 이미지의 크기 R과 C가 주어진다. 그 다음 R개의 각 줄에는 C개의 픽셀 값이 주어진다. 마지막 줄에는 T값이 주어진다.
5. 출력
첫째 줄에 필터링 된 이미지 J의 각 픽셀 값 중에서 T보다 크거나 같은 것의 개수를 출력한다.
6. 풀이
- 정해진 board에서 3X3 필터를 적용하여 그 필터에 겹치는 수들을 오름차순으로 정렬하여 중앙값이 4번째 인덱스와 T 값을 비교하여 T보다 크거나 같으면 cnt를 1 증가시킨다.
- 마지막에 cnt를 출력하면 된다.
7. 소스 코드
import sys
input = sys.stdin.readline
R, C = map(int, input().split()) # 이미지의 크기
# 이미지
board = []
# 입력
for _ in range(R) :
board.append(list(map(int, input().split())))
# T값 입력
T = int(input())
cnt = 0 # T보다 크거나 같은 갯수
for i in range(R-2) :
for j in range(C-2) :
li = []
for k in range(i, i+3) :
for l in range(j, j+3) :
li.append(board[k][l])
li.sort() # 오름차순 정렬
# T값보다 크거나 같으면 증가
if li[4] >= T :
cnt += 1
print(cnt)
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 15700번 타일 채우기 4 파이썬(Python) (0) | 2021.07.16 |
---|---|
[백준 알고리즘] 백준 11948번 과목선택 파이썬(Python) (0) | 2021.07.16 |
[백준 알고리즘] 백준 3273번 두 수의 합 파이썬(Python) (0) | 2021.07.13 |
[백준 알고리즘] 백준 3036번 필터 파이썬(Python) (0) | 2021.07.13 |
[백준 알고리즘] 백준 14606번 피자(Small) 파이썬(Python) (0) | 2021.07.12 |
[백준 알고리즘] 백준 1145번 적어도 대부분의 배수 파이썬(Python) (0) | 2021.07.10 |
[백준 알고리즘] 백준 19941번 햄버거 분배 파이썬(Python) (0) | 2021.07.10 |
[백준 알고리즘] 백준 2145번 숫자 놀이 파이썬(Python) (0) | 2021.07.08 |
최근댓글