728x90
문제
https://www.acmicpc.net/problem/1245
해설
농장의 산봉우리를 찾아야 한다.
따라서 전체 탐색을 해줘야 한다.
8방향을 확인하며 자신보다 높은 곳이 있다면 temp를 false로 바꿔준다.
또한 한 지점을 방문할 때마다 방문여부처리를 체크해준다.
자신보다 높은 곳이 없다면, 그 위치가 산봉우리가 된다.
temp가 true라면 봉우리의 갯수를 증가시킨다.
소스 코드
import java.util.*
private lateinit var arr: Array<IntArray>
private lateinit var visited: Array<BooleanArray>
private val dy = intArrayOf(1, 1, 1, -1, -1, -1, 0, 0)
private val dx = intArrayOf(1, 0, -1, 1, 0, -1, 1, -1)
private var temp = true
private var n = 0
private var m = 0
fun main() {
input()
var cnt = 0
repeat(n) { i ->
repeat(m){ j ->
if(!visited[i][j]){
temp = true
check(i, j)
if(temp) cnt++
}
}
}
println(cnt)
}
private fun input() = with(System.`in`.bufferedReader()) {
var st = StringTokenizer(readLine())
n = st.nextToken().toInt()
m = st.nextToken().toInt()
arr = Array(n) { IntArray(m) }
visited = Array(n) { BooleanArray(m) }
repeat(n) { i ->
st = StringTokenizer(readLine())
repeat(m) { j ->
arr[i][j] = st.nextToken().toInt()
}
}
}
private fun check(y: Int, x: Int) {
for(i in 0 until 8) {
val ny = y + dy[i]
val nx = x + dx[i]
if(ny in 0 until n&& nx in 0 until m) {
if(arr[y][x] < arr[ny][nx]) temp = false
if(!visited[ny][nx] && arr[y][x] == arr[ny][nx]) {
visited[ny][nx] = true
check(ny, nx)
}
}
}
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 1922번: 네트워크 연결 (0) | 2022.07.22 |
---|---|
[백준/BOJ] 12931번: 두 배 더하기 (0) | 2022.07.20 |
[백준/BOJ] 7562번: 나이트의 이동 (0) | 2022.07.17 |
[백준/BOJ] 2247번: 숨바꼭질 4 (0) | 2022.07.17 |
[백준/BOJ] 2468번: 안전 영역 (0) | 2022.07.15 |
댓글