📄문제
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.
만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.
⬇️ 입력
첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
5 5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2 |
⬆️ 출력
봉우리의 개수를 출력하세요.
10 |
📝 풀이
#include <iostream>
int main()
{
int N, cnt = 0;
scanf_s("%d", &N);
int** arr = new int* [N];
for (int i = 0; i < N; ++i)
arr[i] = new int[N];
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
scanf_s("%d", &arr[i][j]);
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
if (i != 0 && arr[i][j] <= arr[i - 1][j]) // 좌측 검사
continue;
else if (i != N - 1 && arr[i][j] <= arr[i + 1][j]) // 우측 검사
continue;
else if (j != 0 && arr[i][j] <= arr[i][j - 1]) // 상측 검사
continue;
else if (j != N - 1 && arr[i][j] <= arr[i][j + 1]) // 하측 검사
continue;
++cnt;
}
}
printf("%d", cnt);
}
- 2차원 배열을 생성한 후 값을 넣어줍니다.
- 가장자리부분은 0으로 설정되어있다는 가정으로, 인덱스 번호가 0이나, N-1이라면 해당 위치를 기준으로 상하좌우는 높이가 0이기에 검사를 통과하게 됩니다.
- 상하좌우 네가지의 검사를 통과하게 되면 cnt가 1이 증가합니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] 블록의 최댓값 (0) | 2023.10.16 |
---|---|
[C++] 각 행의 평균과 가장 가까운 값 (1) | 2023.10.16 |
[C++] 멀티태스킹 (1) | 2023.10.16 |
[C++] 공주 구하기 (요세푸스 문제) (1) | 2023.10.16 |
[C++] 마구간 정하기 🔥 (0) | 2023.10.16 |