모두CBT

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이다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.