ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] boostcamp 코딩테스트 유형 Q.4
    언어/C 2024. 5. 30. 10:59

    boostcamp 코딩테스트 유형 Q.4

    문제를 먼저 풀어보세요.

     

    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 위치를 표현하는 식도 성립할 것 입니다. 

     

     

Designed by Tistory.