캔디팡 문제 링크 : http://codeup.kr/JudgeOnline/problem.php?id=2605


해결 전략)


2차원 맵정보가 있는데 각 좌표마다 방문하면서 4방향(상,하,좌,우)에 인접해있는 모든 개수정보를 알고 결국, 인접해있는개수가 3개이상이면 카운팅을 해줘서 답을 구할수있다.

문제예시그림예를 들어서 그린 그림입니다.


여기서 인접해 있는 것이 보인다면 그 곳으로 좌표이동하고 다시 4방향으로 인접해 있는 개수정보를 파악한다.


이 작업을 모든 맵 좌표를 방문하면서 체크하게 된다. 단, 방문이 된 곳은 체크를 따로해줘서 재탐색이 이뤄지지 않도록 한다.


소스코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<stdio.h>
int map[8][8];
int visit[8][8];
int ret;
int cnt_ret;
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,-1,1 };
int solve(int r, int l)
{
    // 4방향에서 현재숫자와 같은것을 비교하여 캔디팡이 터지는 영역을 카운팅 하는함수
    int tx, ty;
    int cnt =1 ;
    visit[r][l] = 1;
    for (int i = 0; i < 4; i++)
    {
        tx = r + dx[i];
        ty = l + dy[i];
        if (tx < 1 || tx > 7 || ty < 1 || ty >7)
        {
            continue;
        }
        else
        {
            if (!visit[tx][ty] && (map[tx][ty] == map[r][l]))
            {
                cnt += solve(tx, ty);
            }
        }
    }
    return cnt;
}
int main()
{
    for (int i = 1; i <= 7; i++)
    {
        for (int j = 1; j <= 7; j++)
        {
            scanf("%d"&map[i][j]);
        }
    }
    for (int i = 1; i <= 7; i++)
    {
        for (int j = 1; j <= 7; j++)
        {
            ret = solve(i,j);
            if (ret >= 3)
            {
                cnt_ret++;
            }
        }
    }
     
    printf("%d\n", cnt_ret);
}
 
cs


반응형

'PS > 코드업' 카테고리의 다른 글

3704번 계단 오르기 2  (0) 2019.03.31
1920번 2진수 변환 (재귀함수)  (0) 2019.03.16
3733번 우박수 길이 - large  (0) 2019.01.27
2606. 소수점 이하 출력  (0) 2018.12.17
재귀함수 1부터 n까지 합 구하기  (0) 2018.11.18

+ Recent posts