알고리즘
[JAVA] 백준 1245 - 농장 관리
ji_iin
2021. 7. 26. 21:12
문제
[ 문제 조건 ]
- 인접한 격자 8개를 모두 비교할 dx, dy 배열
- 산봉우리 높이 > 산봉우리 인접한 격자의 높이
- 산봉우리 총 갯수 = count
- 해당 값이 산봉우리 인지 아닌지 여부 = top
[ 해결순서 ]
- 문제에서의 '인접하다' 정의를 먼저 이해해야한다. X, Y 좌표 차이가 1이하인 값인 인접한 값. 대각선 4군데 상하좌우 총 8개의 값을 비교하여 깊이우선탐색을 진행해야한다.
- 모든 farm 배열을 확인하여 방문하지 않은 값 중 0이 아닌 산봉우리가 될 수 있는 값들을 기준으로 dfs() 를 실행하는데
- 그 전에, 해당 값이 산봉우리라고 임의로 지정해두고 깊이우선탐색 실행 후에도 해당 값이 제일 높으면 그 때 총 값을 증가시킨다.
- 기존의 깊이우선탐색을 진행하는 방식처럼 dfs() 메소드를 작성하는데
- 기준 값이 인접한 값보다 작으면 즉, 높이가 더 큰 산봉우리가 있다면 그 값은 산봉우리가 될 수 없으므로 재귀적으로 너비우선탐색 할 필요도 없다.
- 방문하지 않은 값 중에 높이가 같은 값이 있다면 그 값을 기준으로 너비우선탐색을 실행하여 산봉우리를 찾는다.
- 최종 총 값을 출력한다.
✏️한줄평
처음에 문제를 잘못 이해해서 산봉우리가 여러개인데 왜 하나로 취급하지? 하는 의문이 들었는데, 그냥 같은 높이의 산봉우리라면 하나의 산봉우리 인 것이다. 뭔가 문제의 조건이 애매하다는 느낌은 나만 드는건가. 조금 헷갈렸다. 조건을 같은 높이라면 하나의 산봉우리로 취급한다는 문장이 있으면 좀 명확할 것 같다는 생각이든다. 기존 깊이우선탐색 문제의 응용버전이다.