반응형
2025년 정보처리기사 실기 1회차에 나온 C언어 체커보드 패턴 문제를 알기 쉽게 설명 해드리겠습니다.
📋 분석할 코드
#include <stdio.h>
#include <stdlib.h>
void set(int** arr, int* data, int rows, int cols) {
for (int i = 0; i < rows * cols; ++i) {
arr[((i + 1) / rows) % rows][((i + 1) % cols)] = data[i];
}
}
int main() {
int rows = 3, cols = 3, sum = 0;
int data[] = {5, 2, 7, 4, 1, 8, 3, 6, 9};
int** arr;
arr = (int**) malloc(sizeof(int*) * rows);
for (int i = 0; i < cols; i++) {
arr[i] = (int*) malloc(sizeof(int) * cols);
}
set(arr, data, rows, cols);
for (int i = 0; i < rows * cols; i++) {
sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1);
}
printf("%d", sum);
return 0;
}
#include <stdlib.h>
void set(int** arr, int* data, int rows, int cols) {
for (int i = 0; i < rows * cols; ++i) {
arr[((i + 1) / rows) % rows][((i + 1) % cols)] = data[i];
}
}
int main() {
int rows = 3, cols = 3, sum = 0;
int data[] = {5, 2, 7, 4, 1, 8, 3, 6, 9};
int** arr;
arr = (int**) malloc(sizeof(int*) * rows);
for (int i = 0; i < cols; i++) {
arr[i] = (int*) malloc(sizeof(int) * cols);
}
set(arr, data, rows, cols);
for (int i = 0; i < rows * cols; i++) {
sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1);
}
printf("%d", sum);
return 0;
}
반응형
1️⃣ 초기 데이터 설정
int rows = 3, cols = 3;
int data[] = {5, 2, 7, 4, 1, 8, 3, 6, 9};
int data[] = {5, 2, 7, 4, 1, 8, 3, 6, 9};
1차원 배열 data:
5
2
7
4
1
8
3
6
9
2️⃣ 2차원 배열 메모리 할당
int** arr;
arr = (int**) malloc(sizeof(int*) * rows);
for (int i = 0; i < cols; i++) {
arr[i] = (int*) malloc(sizeof(int) * cols);
}
arr = (int**) malloc(sizeof(int*) * rows);
for (int i = 0; i < cols; i++) {
arr[i] = (int*) malloc(sizeof(int) * cols);
}
✅ 3×3 2차원 배열 메모리 할당 완료
3️⃣ set 함수 - 1차원 배열을 2차원 배열로 변환
// 핵심 공식: arr[((i + 1) / rows) % rows][((i + 1) % cols)] = data[i];
변환 과정:
i=0: ((0+1)/3)%3=0, (0+1)%3=1 → arr[0][1] = data[0] = 5
i=1: ((1+1)/3)%3=0, (1+1)%3=2 → arr[0][2] = data[1] = 2
i=2: ((2+1)/3)%3=1, (2+1)%3=0 → arr[1][0] = data[2] = 7
i=3: ((3+1)/3)%3=1, (3+1)%3=1 → arr[1][1] = data[3] = 4
i=4: ((4+1)/3)%3=1, (4+1)%3=2 → arr[1][2] = data[4] = 1
i=5: ((5+1)/3)%3=2, (5+1)%3=0 → arr[2][0] = data[5] = 8
i=6: ((6+1)/3)%3=2, (6+1)%3=1 → arr[2][1] = data[6] = 3
i=7: ((7+1)/3)%3=2, (7+1)%3=2 → arr[2][2] = data[7] = 6
i=8: ((8+1)/3)%3=0, (8+1)%3=0 → arr[0][0] = data[8] = 9
최종 2차원 배열:
9
5
2
7
4
1
8
3
6
4️⃣ 체커보드 패턴 합계 계산
for (int i = 0; i < rows * cols; i++) {
sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1);
}
sum += arr[i / rows][i % cols] * (i % 2 == 0 ? 1 : -1);
}
체커보드 패턴 (+1, -1 교대):
+9
-5
+2
-7
+4
-1
+8
-3
+6
계산 과정:
i=0: arr[0][0] * (+1) = 9 * 1 = +9
i=1: arr[0][1] * (-1) = 5 * (-1) = -5
i=2: arr[0][2] * (+1) = 2 * 1 = +2
i=3: arr[1][0] * (-1) = 7 * (-1) = -7
i=4: arr[1][1] * (+1) = 4 * 1 = +4
i=5: arr[1][2] * (-1) = 1 * (-1) = -1
i=6: arr[2][0] * (+1) = 8 * 1 = +8
i=7: arr[2][1] * (-1) = 3 * (-1) = -3
i=8: arr[2][2] * (+1) = 6 * 1 = +6
합계: 9 + (-5) + 2 + (-7) + 4 + (-1) + 8 + (-3) + 6
= 9 - 5 + 2 - 7 + 4 - 1 + 8 - 3 + 6
= 13
5️⃣ 메모리 해제
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
free(arr[i]);
}
free(arr);
✅ 동적 할당된 메모리 해제
🎯 최종 결과: 13
📝 코드 요약
이 코드는 다음과 같은 작업을 수행합니다:
- 특별한 재배열: 1차원 배열을 특별한 패턴으로 2차원 배열로 재배열
- 체커보드 패턴: 2차원 배열의 각 요소에 체커보드 패턴(+1, -1 교대)을 적용
- 합산: 모든 값을 합산하여 최종 결과 출력
핵심 공식:
- 재배열:
arr[((i + 1) / rows) % rows][((i + 1) % cols)] = data[i]
- 체커보드:
(i % 2 == 0 ? 1 : -1)
반응형
'자격증' 카테고리의 다른 글
[5일차] 정보처리기사 실기 1장 요구사항 확인 (0) | 2024.10.04 |
---|---|
[4일차] 정보처리기사 실기 7장-SQL 응용 (0) | 2024.10.02 |
[3일차] 정보처리기사 실기 프로그래밍 언어 활용 - Python 언어 (0) | 2024.09.30 |
[2일차] 정보처리기사 실기 프로그래밍 언어 활용 - Java 언어 (0) | 2024.09.27 |
[1일차] 정보처리기사 실기 프로그래밍 언어 활용 - C언어 (0) | 2024.09.26 |