-
반응형
2차원 데이터를 1차원 데이터로 변환하기
1. 예시로, 5행 4열 크기로 줄인 바독판에서 1행 1열부터 순서대로 돌을 9개 놓는다.
2. 돌을 놓을 때마다 0번부터 1씩 증가시키면서 돌에 번호를 적어둔다
1차원 데이터를 2차원 데이터로 변환하기
1차원 데이터를 2차원 데이터로 변환하려면 행 번호와 열 번호를 계산해야 한다.
2차원 배열은 메모리상에 1차원 형태로 데이터를 저장하면서 프로그래머가 이 메모리를 사용할 때 컴파일러가 수학 공식을 적용하여 2차원 개념을 제공
// 두 배열의 메모리 형태는 동일 char temp[5][4] char test[20]; char temp [M][N]; char test[L]; // M*N = L로 가정 test[a] 와 temp[a / N][a % N] 위치 같음 // temp[b][c] 항목과 test[b * N + c] 의 위치가 같다.
1. test[a] 항목과 temp[a / N][a % N] 항목은 위치가 같다
a를 6이라 가정하면 test[6] 항목과 temp[6 / 4][6 % 4] = temp[1][2] 항목의 위치가 동일
2. temp[b][c] 항목과 test[b * N + c] 항목은 위치가 같다
b를 4, c를 1이라 가정하면, temp[4][1] 항목과 test[4*4+1] 항목의 위치와 동일
1차원 배열과 2차원 배열의 차이
바둑판을 3행 4열 형태로 축소시켜놓고 돌이 놓여 있는 상황을 1차원 배열을 사용하여 초깃값을 저장한 후 바둑판의 상황을 출력
char data[12] = {0 , 0, 2, 0, 1, 1, 0, 0, 2, 1, 0, 2}; int x, y; for(int i=0; i<12; i++) { x = i % 4 + 1; y = i / 4 + 1; printf(“%d행 %d열에”, x, y); if(data[i] == 1) printf(“검은 돌이 놓여있습니다.\n”); else if(data[i] == 2) printf(“흰 돌이 놓여있습니다.\n”); else printf(“는 돌이 놓여있지 않습니다.\n”); }
char data[3][4] = { {0 , 0, 2, 0}, {1, 1, 0, 0}, {2, 1, 0, 2} }; int x, y; for(int y=0; y<3; y++) { for(int x=0; x<4; x++) { printf(“%d행 %d열에”, y+1, x+1); if(data[y][x] == 1) printf(“검은 돌이 놓여있습니다.\n”); else if(data[y][x] == 2) printf(“흰 돌이 놓여있습니다.\n”); else printf(“는 돌이 놓여있지 않습니다.\n”); } }
반응형'C' 카테고리의 다른 글
운영체제의 메모리 관리 방식 (0) 2022.05.12 2차원 배열 (0) 2022.05.09 배열 문자열 처리 (0) 2022.05.08