캔디팡 문제 링크 : http://codeup.kr/JudgeOnline/problem.php?id=2605
해결 전략)
2차원 맵정보가 있는데 각 좌표마다 방문하면서 4방향(상,하,좌,우)에 인접해있는 모든 개수정보를 알고 결국, 인접해있는개수가 3개이상이면 카운팅을 해줘서 답을 구할수있다.
예를 들어서 그린 그림입니다.
여기서 인접해 있는 것이 보인다면 그 곳으로 좌표이동하고 다시 4방향으로 인접해 있는 개수정보를 파악한다.
이 작업을 모든 맵 좌표를 방문하면서 체크하게 된다. 단, 방문이 된 곳은 체크를 따로해줘서 재탐색이 이뤄지지 않도록 한다.
소스코드)
#include
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 |