-
[C] boostcamp 코딩테스트 유형 Q.4언어/C 2024. 5. 30. 10:59
문제를 먼저 풀어보세요.
4 9 2
3 5 7
8 1 6
1번 square[1][1] 값은 5이고 square[2][1] 값은 1이다.
square[1][1] 의 값은 하나밖에 없으니 여기까진 개념을 몰라도 알 수 있습니다.
여기서 헷갈리죠, square[2][1]의 값이 7인지 1인지....
결론부터 말하자면, square[x][y] 일 때 x의 값은 세로 방향 y의 값은 가로 방향이라고 생각하면 됩니다.
따라서 square[2][1] 값은 1이 되는 겁니다.
자세히 알아봅시다.
여기서 배열의 각 요소는 행(row)과 열(column)로 접근할 수 있습니다. 배열의 인덱스는 0부터 시작합니다. 즉, 첫 번째 행의 첫 번째 요소는 square[0][0]이고, 첫 번째 행의 두 번째 요소는 square[0][1]입니다. 이를 바탕으로 다음과 같이 배열의 각 요소를 설명할 수 있습니다:
int square[3][3] = { {4, 9, 2}, {3, 5, 7}, {8, 1, 6} };
- square[0][0] = 4
- square[0][1] = 9
- square[0][2] = 2
- square[1][0] = 3
- square[1][1] = 5
- square[1][2] = 7
- square[2][0] = 8
- square[2][1] = 1
- square[2][2] = 6
2번 : 2차원 배열은 메모리 구조가 연속되기 때문에 square[x][y] 형태와 square[y][x] 형태가 동일한 메모리 위치를 의미한다.
결론 : 반만 맞다.
C 언어에서 2차원 배열은 메모리에서 연속적으로 저장되지만, square[x][y] 형태와 square[y][x] 는 일반적으로 서로 다른 요소를 가리키므로 메모리 주소도 다르다
다음과 같은 2차원 배열 square이 있습니다.
int square[3][3] = { {4, 9, 2}, {3, 5, 7}, {8, 1, 6} };
.
메모리에서 이 배열의 배치는 다음과 같습니다:
4, 9, 2, 3, 5, 7, 8, 1, 6
각 요소의 메모리 주소는 다음과 같습니다.
&square[0][0], &square[0][1], &square[0][2], &square[1][0], &square[1][1], &square[1][2], &square[2][0], &square[2][1], &square[2][2]
square[x][y]와 square[y][x]는 일반적으로 서로 다른 요소를 가리키므로, 메모리 주소도 다릅니다. 예를 들어:
- square[0][1]은 배열의 첫 번째 행, 두 번째 열의 요소로서 값은 9입니다.
- square[1][0]은 배열의 두 번째 행, 첫 번째 열의 요소로서 값은 3입니다
따라서 square[x][y]와 square[y][x] 은 같지 않다.
3번 : C 언어 배열 구조에서는 2차원 배열도 메모리에서는 연속되기 때문에 square[0][4] 값은 5이다.
결론 : 맞다.
메모리에서 이 배열의 배치는 다음과 같습니다:
4, 9, 2, 3, 5, 7, 8, 1, 6
행 우선 저장 방식을 사용하기 때문에, square[0][4] 는 square[1][1] 과 동일한 위치를 가리키며, 값은 5이다.
행 우선 저장 방식이란
1 2 3 4 5 6 7 8 9 열 우선 저장 방식도 있다.
1 4 7 2 5 8 3 6 9 위 표처럼 1부터 9까지 순서대로 저장됨. 더 자세한건 -> https://withhamit.tistory.com/702
따라서 인덱스 0,1,2,3,4 면 값 5가 나오는 겁니다. 그러면 [0][5] 였으면 얼마일까요? 값 6이겠지요.
4번 square[y][x] 형식으로 접근한다고 가정할 때, x = (x +1) % 3을 반복하는 것으로 모든 배열의 x 위치를 표현 할 수 있다.
결론 : 맞다.
처음에 저는 x에 0, 1, 2를 대입해서 0, 1, 2가 나오는 지 확인 했습니다.
x 가 0 일 때, 0 = (0+1) % 3 을 하면 1이 나옵니다. %는 나머지를 구하는 연산자입니다.
x 가 1 일 때, 1= (1+1) % 3 = 2
x 가 2일 때, 2 = (2+1) % 3 = 0
따라서 0, 1, 2 값이 전부 나오기 때문에 위의 계산식을 반복하는 것으로 모든 배열의 x 위치를 표현할 수 있다고 생각하였습니다.
또한 , 위 식이 성립한다면 y = (y + 1) % 3을 사용하여 y 위치를 표현하는 식도 성립할 것 입니다.
'언어 > C' 카테고리의 다른 글
[C] 포인터 (0) 2024.10.05 [C] 문자열 저장 : 메모리구조 (0) 2024.05.30 [C] boostcamp 코딩테스트 유형 Q.5 (0) 2024.05.30 [C] while문으로 1부터 100구하기, 반복조건 count <101일까? count == 100일까? (0) 2024.05.30