728x90
▶문제 : 캔디팡 (codeup.kr)
▶코드 작성
#include <stdio.h>
int arr[7][7];
int func(int i, int j) {
int color = arr[i][j];
if (color == 0) return 0;//이미 탐색이 끝난 곳
arr[i][j] = 0;//현재 위치 i,j 탐색완료 : 0
int cnt = 1;
if (color == arr[i - 1][j] && i > 0) cnt += func(i - 1, j); //상
if (color == arr[i + 1][j] && i < 6) cnt += func(i + 1, j); //하
if (color == arr[i][j - 1] && j > 0) cnt += func(i, j - 1); //좌
if (color == arr[i][j + 1] && j < 6) cnt += func(i, j + 1); //우
return cnt;
}
int main() {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
scanf("%d", &arr[i][j]);
}
}
int cnt = 0;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7; j++) {
if (func(i, j) >= 3) cnt++;//근접한 같은 색의 칸 개수가 3이상이면 cnt++
}
}
printf("%d", cnt);
return 0;
}
▶해석
주어진 7x7크기의 arr배열을 전체 탐색하면서 상, 하, 좌, 우로 근접한 칸이 같은 색인지 확인하여 재귀 호출하였다.
이때 main에서 탐색한 arr [i][j] 칸과 근접한 같은 색의 칸은 한 번 탐색하면 더 이상 탐색하지 않아도 되므로 0을 대입하여 탐색이 끝났음을 나타냈다.
728x90
'코드업(codeup) > C' 카테고리의 다른 글
코드업(codeup) 1936 : (재귀함수) 두 노드간의 거리 C언어 (0) | 2022.09.17 |
---|---|
코드업(codeup) 3733 : 우박수 길이 (3n+1) (large) C언어 (0) | 2022.07.30 |
코드업(codeup) 3703 : 사탕 줍기 1 C언어 (0) | 2022.07.17 |
코드업(codeup) 3802 : 쉬운 계단 수 C언어 (0) | 2022.03.10 |
코드업(codeup) 3801 : 오르막 수 C언어 (0) | 2022.03.10 |
댓글