목록2차원배열 (5)
여행을 개발하다
안녕하세요!! 오늘 포스팅할 내용은 2차원 배열의 3번째 응용 예제, '달팽이 배열 만들기'입니다. 달팽이 배열은 정보처리기사 알고리즘 파트 등에서 빈번하게 출제되는 유형입니다. 그럼 배열은 어떻게 구성되어 있는지 살펴보고, C++ 알고리즘으로 구현해보도록 하겠습니다. 1. 달팽이 배열 말 그대로 달팽이 집 모양처럼 생긴 배열을 의미합니다. 여기서 숫자의 배열 형태를 보시면, 안쪽으로 휘말려 들어가는 모양을 하고 있습니다. 그런데 블록을 잡고 자세히 보시면, 5, 4, 4, 3, 3, 2, 2, 1, 1... 의 방식으로 반복되며 채워지는 걸 확인하실 수 있습니다. 그렇다면 이러한 규칙성에 기반해서 코드를 짜보도록 하겠습니다. 2. C++로 달팽이 배열 만들기 2-1. 정적 할당으로 만들기 항상 그래왔던..
안녕하세요! 오늘 포스팅할 내용은 2차원 배열의 응용예제, '마방진 만들기'입니다! 거북이 등판의 숫자... 다들 한 번씩은 들어보셨을텐데요. 마방진은 어떤 원리가 적용되는지를 간단하게 살펴보고, C++ 2차원 배열로 채워보도록 하겠습니다. 1. 마방진의 원리 마방진은 n * n의 개의 숫자를 n * n 행렬에 배열한 것인데, 가로, 세로, 대각선의 합이 모두 같다는 특징을 가지고 있습니다. n이 2가 아니면 마방진은 항상 존재하구요. 간단한 예로 5 * 5 마방진은 이렇게 생겼어요. 1부터 n * n까지 모두 채워져 있는데, 아직까진 배열이 어떻게 채워졌는지 감이 오지 않습니다. 하지만 여기에도 규칙이 있으니, 그것은 1이 반드시 첫 번째 행 중간에 와야한다는 점이에요. 그리고 숫자들을 오름차순으로 하..
안녕하세요! 오늘은 2차원 배열의 응용 예제로, 'ㄹ' 자 모양의 배열을 만들어보겠습니다. 제가 그 많고 많은 예제 중에 'ㄹ'자 배열을 선택했냐면요... 지난달 말에 치룬 정보처리기사 실기 시험에서 나왔기 때문이에요. 시험지에서 직접 봐서 그런지, 한 번쯤 직접 구현해보고 싶더라구요!! 마침 2차원 배열 이야기를 하고 있던 중이어서, 타이밍도 좋았습니다! 1. 'ㄹ'자 배열 'ㄹ'자 배열은 다음과 같은 배열을 말하는데요. 자세히 보시면, 숫자가 증가하는 방향이 'ㄹ'자 형태를 띕니다. 2. C++로 'ㄹ'자 배열 구현하기 그럼 C++로 'ㄹ' 자 배열을 구현해보도록 하되, 한 번은 2차원 배열의 정적 할당으로, 한 번은 동적 할당으로 해보겠습니다. 2-1. 정적 할당으로 구현하기 임의로, 5*5의 정적..
안녕하세요! 오늘은 지난 시간에 이어 '2차원 배열의 동적할당'에 대해 알아보겠습니다. 동적 할당이므로 역시 '포인터(pointer)'도 자연스럽게 등장합니다. 1. 2차원 동적 배열의 선언 1차원 배열을 동적으로 할당할 땐, 가로축, 즉 단 하나의 메모리의 시작 위치만 정해주면 되었었죠? 하지만 2차원 배열은 세로축, 배열 안에 있는 다른 배열도 신경써야 하는 번거로움이 생겨버렸어요. 그래서 포인터도 2개가 필요해졌네요. 하나는 큰 범위에 있는 배열의 시작 메모리 위치를 기억할 포인터 하나, 하나는 인수로 갖고 있는 배열들의 시작 메모리 위치를 기억할 포인터 하나. 이 때 등장하는 개념이 '이중 포인터'입니다. 이중 포인터는 '포인터의 포인터'라고 생각하시면 됩니다. 포인터 변수가 '변수가 저장된 메모..
안녕하세요! 오늘 포스팅 할 내용은 '2차원 배열의 정적할당'입니다. 지난 시간에는 인수들을 단순 열거하는 1차원 배열에 대해서 이야기했습니다. 오늘은 하나의 배열이 여러 개의 배열을 인수로 갖고 있는, 즉 가로와 세로축이 있는 2차원 배열의 정적 할당은 어떻게 이루어지는지 알아보겠습니다. 1. 2차원 정적 배열의 선언 2차원 배열은 '배열들의 배열'이라고 생각하시면 이해하기 쉽습니다. 즉, 배열의 인수가 '배열'이 되는 것이지요. 1차원 정적 배열을 선언했던 것처럼, 배열의 크기를 적어주기만 하면 됩니다. 다만 행과 열의 크기가 모두 지정되어야 한다는 점을 주의하셔야 합니다. 예를 들어, 5행 5열의 2차원 배열을 선언하기 위해서는 다음과 같이 코딩하면 되겠습니다. '자료형 배열명[행의 크기][열의 크..