라떼는말이야
[C 기초] 이중 포인터를 사용한 2차원 배열 접근 본문
www.notion.so/1-b8430429b95b49ac9a94f51b9c9b134f
1. 미션 제목
포인터를 이중으로 활용해보자
2. 지시문
유사 문제에서 배열을 포인터로 접근하는 방법을 학습하였습니다. 2차원 배열(5x5)을 선언한 후 포인터로 접근하여서 순서대로 출력하는 코드를 작성해보세요
Int arr[6][5]={{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}, {21, 22, 23, 24, 25},{26, 27, 28, 29, 30}};
배열의 값을 접근할 경우 arr[m][n] 또는 포인터로 접근할 수 있습니다. 2차 배열의 경우 이중 포인터로 접근할 수 있으니 활용해보시길 바랍니다. 이중 For문을 활용하시면 쉽게 접근할 수 있습니다.
예)
출력값:
26 27 28 29 30
21 22 23 24 25
…
6 7 8 9 10
1 2 3 4 5
3. 핵심 개념
#이중포인터 #루프
나의 풀이
#include<stdio.h>
int main() {
int arr[6][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}, {26, 27, 28, 29, 30} };
int m = sizeof(arr) / sizeof(arr[0]); // 행의 개수
int n = sizeof(arr) / m / sizeof(arr[0][0]); // 열의 개수
for (int i = m - 1; i >= 0; i--) {
for (int j = 0; j < n; j++) {
printf("%2d\t", *(*(arr + i) + j)); // arr[i][j]의 포인터 표현
} printf("\n");
}
return 0;
}
arr[0]은 {1, 2, 3, 4, 5}를 나타내므로 arr의 크기에서 arr[0]의 크기로 나누면 행의 크기를 알 수 있다.
arr[0][0]은 {1}을 나타내므로 arr를 행의 크기로 나눠서 행 하나의 크기를 구하고 arr[0][0]으로 나누면 열의 크기를 알 수 있다. sizeof(arr[0][0]) 대신 sizeof(int)를 사용해도 되지만 다른 데이터 타입에서도 사용 가능한 일반화 된 모습을 위해 arr[0][0]의 크기로 나눴다.
arr[i][j]를 포인터로 표현하면 *( *( arr + i ) + j ) ) 로 나타낼 수 있다.
5행부터 0행 순으로 출력하므로 m-1부터 0까지 순회하도록 반복문을 작성했다.
'알고리즘 > CS50' 카테고리의 다른 글
[C] 배열을 이용한 Stack 만들기 (0) | 2021.03.16 |
---|---|
[C] linked list를 활용한 Merge Sort (0) | 2021.03.15 |
[C 기초] 포인터를 이용한 버블 정렬 (0) | 2021.03.14 |
메모리와 OverFlow 개념 정리, strcpy와 strncpy의 차이점 (0) | 2021.03.13 |
[C] 가장 큰 낙하거리 찾기 (0) | 2021.03.11 |
[C] 최단 시간에 다리 건너기 문제 (0) | 2021.03.10 |
[C] 친구들과 최단거리에 있는 위치 구하기 (0) | 2021.03.09 |
[C] 숫자 애너그램 찾기 (다양한 정렬 알고리즘) (0) | 2021.03.08 |