Certificate/정보처리기사 실기

2022년 3회 기출 01 - C언어

웨일파도 2024. 3. 27. 16:53
반응형
#include <stdio.h>

int calc(int w, int h, int j, int i) {
    if (i >= 0 && i < h && j >= 0 && j < w) {
        return 1;
    }
    return 0;
}

int main() {
	int field[4][4] = {{0,1,0,1}, {0,0,0,1}, {1,1,1,0}, {0,1,1,1}};
	int mines[4][4]= {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
	int w = 4, h = 4;
	int i, j ,k ,l;
	
	for (l=0; l<h; l++) {
		for (k=0; k<w; k++) {
			if(field[l][k] == 0) 
				continue;
			
			for(i=l-1; i<=l+1;i++) {
				for (j=k-1; j<=k+1; j++) {
					if (calc(w,h,j,i) == 1) {
						mines[i][j] += 1;
					}
				}
			}
		}
	}
	
	for (l=0; l<h; l++) {
		for(k=0; k<w; k++) {
			printf("%d", mines[l][k]);
		}
		printf("\n");
	}
	return 0;
}

 

이 코드의 목적은 field 배열에서 각 지뢰의 위치를 찾고, 해당 지뢰 주변의 모든 셀의 카운트를 1씩 증가시키는 것입니다.

 

각 지뢰('1'로 표시된 셀) 주변에 있는 모든 셀의 값을 증가시킵니다. 이 과정은 배열의 범위 내에서만 이루어지며, 각 지뢰가 있는 위치에서 주변 8개 셀(가능한 경우)의 값을 1씩 증가시키는 방식으로 작동합니다.

핵심 로직은 다음과 같습니다:

  • 지뢰가 있는 각 위치 l, k에 대해, 그 주변 셀 i, j를 탐색합니다.
  • 주변 셀이 유효한 범위 내에 있다면(calc 함수가 1을 반환), 해당 셀의 mines 값에 1을 더합니다. 이는 지뢰 주변에 있는 셀의 수를 카운트합니다.
  • 이 프로세스는 모든 지뢰 위치에 대해 반복되며, 최종적으로 각 셀 주변의 지뢰 수가 mines 배열에 기록됩니다.

field 배열을 기반으로 mines 배열을 계산하면, 다음과 같은 결과를 얻습니다:

 

field 배열:
0 1 0 1
0 0 0 1
1 1 1 0
0 1 1 1

mines 배열 계산 결과:
1 1 2 1
3 3 3 2
1 3 3 2
2 2 2 1
반응형