본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 2605 : 캔디팡 C언어

by starfish22 2022. 7. 30.
728x90

▶문제 : 캔디팡 (codeup.kr)

 

캔디팡

최근 캔디팡이라는 스마트폰 게임이 인기를 끌고 있다. 캔디팡은 7 * 7 모양의 격자 판에 같은 색깔이 연속 3개 이상인 부분을 찾아 터치하면 터지면서 점수를 얻는 게임이다. 이때 연속된 부분은

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

댓글