반응형
백준 1895번 문제입니다. (solved.ac) 기준 실버 4 문제입니다.
https://www.acmicpc.net/problem/1895
문제
문제 접근
이미지(2차원 배열)를 입력받고 3 * 3필터를 통해 이미지의 중앙값을 찾으면서 필터링한 후 해당 이미지에 T 보다 크거나 같은 픽셀의 수를 구하는 문제입니다. 3 * 3 필터를 사용하면 9개의 숫자를 확인할 수 있는데 9개의 수들 중 5번째 숫자가 중앙값입니다.
이미지를 3 * 3으로 완전탐색한 후 중앙값들을 찾아서(필터링) T보다 크거나 같은 수들을 구하는 방식으로 문제를 해결하였습니다.
정답 코드
/**
* 제한사항
* - 숫자 9개가 정렬되어있을 경우 5번째 숫자가 중앙값
* - 이미지 I는 크기가 R * C인 2차원 픽셀
* - R과 C는 3이상 40이하
* - 각 픽셀은 어두운 정도 V를 나타냄
* - V는 0이상 255이하
* - 필터의 크기는 3 * 3
*
* 아이디어
* - 3 * 3 크기로 이미지를 완전탐색
* - 중앙값들을 모은 후 T보다 크거나 같은 픽셀의 수를 구하자
*
* 이슈
* - NumberFormat 에러가 발생...왜지?
* - C개의 픽셀 값이 주어질 때 공백이 딸려오나봄..^^ 코틀린 왜이래
*/
data class Pos(val x: Int, val y: Int)
fun main() {
val filterDir = listOf(
Pos(0, 0),
Pos(0, 1),
Pos(0, 2),
Pos(1, 0),
Pos(2, 0),
Pos(1, 1),
Pos(1, 2),
Pos(2, 1),
Pos(2, 2),
)
var ans = 0
val (r, c) = readln().split(" ").map { it.toInt() }
val imgDataList = mutableListOf<List<Int>>()
repeat(r) {
val colList = readln().trim().split(" ").map { it.toInt() }
imgDataList.add(colList)
}
val t = readln().toInt()
for (row in 0..r - 3) {
for (col in 0..c - 3) {
val filteredList = mutableListOf<Int>()
filterDir.forEach { pos ->
filteredList.add(imgDataList[row + pos.x][col + pos.y])
}
if (t <= filteredList.sorted()[4]) ans++
}
}
println(ans)
}
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 3098번 소셜네트워크(그래프, 브루트포스)[Kotlin - 코틀린] (0) | 2022.10.01 |
---|---|
[백준] 5430번 AC[Kotlin - 코틀린] (0) | 2022.09.14 |
[백준] 5555번 반지(브루트 포스 - 완전 탐색)[Kotlin - 코틀린] (0) | 2022.09.13 |
[백준] 2897번 몬스터 트럭(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.09.13 |
[백준] 2941번 크로아티아 알파벳[Kotlin - 코틀린] (0) | 2022.07.13 |
최근댓글