cospro 9번 문제
위험한 지역 몇개인지 알려주기
문제 설명
4 x 4 크기 격자 모양 지형에 위험 지역이 몇 개인이 알고 싶다. 위험지역이란 동, 서, 남, 북 인접한 지역이 모두 해당 지역보다 높은 지역이다. 예를 들어 지역 높이가 아래와 같다면
3 | 6 | 2 | 8 |
7 | 3 | 4 | 2 |
8 | 6 | 7 | 3 |
5 | 3 | 2 | 9 |
표시된 영역은 인접한 지역이 모두 해당 지역보다 높은 위험지역이다.
지역별 높이가 담긴 2차원 배열 height, height의 길이 height_len이 매개변수로 주어질 때, 위험 지역이 몇 개인지 return 하는 solution 함수를 완성한다.
매개변수 설명
지역별 높이가 담긴 2차원 배열 height, height의 길이 height_len이 매개변수로 주어진다.
각 지역의 높이는 1 이상 50 이하인 자연수이다.
height_len은 항상 4이다.
return 값 설명
위험지역이 몇 개인지 return 한다.
예시
코드 설명
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int height[][4], int height_len) {
int count = 0;
for(int i=0; i<height_len; i++){
for(int j=0; j<height_len; j++){
if(height[i][j]<height[i][j-1]) //서
if(height[i][j]<height[i-1][j]) //북
if(height[i][j]<height[i+1][j]) //남
if(height[i][j]<height[i][j+1]) //동
count++;
}
}
return count;
}
int main() {
int height[4][4] = {{3, 6, 2, 8}, {7, 3, 4, 2}, {8, 6, 7, 3}, {5, 3, 2, 9}};
int height_len = 4;
int ret = solution(height, height_len = 4);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
중첩 if문으로 문제를 풀었지만 이는 단지 조건이 너무 길어지는게 싫어서 했을 뿐이고
if(height[i][j]<height[i][j-1] && height[i][j]<height[i-1][j] && height[i][j]<height[i+1][j] && height[i][j]<height[i][j+1]) count++;
이런식으로 해도 상관 없다.
위험 지역을 구분할 기준점은 height[i][j]이다. 이 좌표를 기준으로 동, 서, 남, 북을 찾아낸다.
동은 j+1, 서는 j-1, 남은 i-1, 북은 i+1이다. 또한 위험 지역은 동서남북 모두 다 기준지역보다 높아야 하기 때문에
&&를 사용한다.
'cospro2급 > cospro_4차' 카테고리의 다른 글
2021-05-22 (0) | 2021.05.22 |
---|---|
2021-05-21 (0) | 2021.05.21 |
2021-05-21 (0) | 2021.05.21 |
2021-05-20 (0) | 2021.05.20 |
2021-05-20 (0) | 2021.05.20 |