22-3아래 C 프로그램은 지뢰 위치 배열을 읽어, 각 칸 주변 8칸에… | 2022년 정보처리기사실기 3회차 기출문제 상세 페이지
3
22-3
아래 C 프로그램은 지뢰 위치 배열을 읽어, 각 칸 주변 8칸에 있는 지뢰 수를 세어 출력한다. 실행 결과를 적으시오.
#include <stdio.h>
#define R 3
#define C 5
int inside(int r, int c) {
return r >= 0 && r < R && c >= 0 && c < C;
}
int main(void) {
int bomb[R][C] = {{1, 0, 0, 1, 0},
{0, 0, 1, 0, 0},
{0, 1, 0, 0, 1}};
int hint[R][C] = {0};
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
if (!bomb[r][c])
continue;
for (int dr = -1; dr <= 1; dr++)
for (int dc = -1; dc <= 1; dc++) {
if (dr == 0 && dc == 0)
continue;
if (inside(r + dr, c + dc))
hint[r + dr][c + dc]++;
}
}
}
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++)
printf("%d", hint[r][c]);
printf("\n");
}
return 0;
}해설
02211
23232
11220
[해설]
지뢰 칸을 만날 때 둘레 8칸의 hint를 1씩 올린다. 자기 칸(dr=0, dc=0)은 건너뛰고 inside()로 배열 밖 좌표를 거른다.
- 지뢰는 (0,0)·(0,3)·(1,2)·(2,1)·(2,4)에 있다.
- (0,1)은 이웃 (0,0)·(1,2)가 지뢰라 2다.
- (1,1)은 이웃 (0,0)·(1,2)·(2,1)이 지뢰라 3이다.
- (1,3)은 이웃 (0,3)·(1,2)·(2,4)가 지뢰라 3이다.
- (2,4)는 이웃 (1,3)·(1,4)·(2,3)에 지뢰가 없어 0이다.
지뢰 칸도 자기 둘레의 지뢰 수가 찍히며, (0,0)은 이웃에 지뢰가 없어 0이다. 세 행을 차례로 찍으면 02211, 23232, 11220이다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.