목록array (7)
여행을 개발하다
안녕하세요! 오늘 포스팅할 내용은 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차원 배열을 선언하기 위해서는 다음과 같이 코딩하면 되겠습니다. '자료형 배열명[행의 크기][열의 크..
안녕하세요! 지난 시간에 1차원 배열의 동적 할당에 대해 알아보았습니다. 그럼 오늘은 지난 시간에 포스팅했던 내용을 응용하여, 학생들의 점수 합계, 평균, 표준편차와 분산을 구하는 간단한 프로그램을 짜보도록 하겠습니다. 물론 학생들의 수가 정해져있다면 정적 할당으로 짜도 무관합니다 : ) 지난번과 동일하게 몇 명의 학생들의 점수를 입력 받을지를 사용자에게 물어보고, 필요한 만큼 배열의 크기를 할당하겠습니다. 합계를 구하기 위해 정수형 변수 sum을 선언하고, 0으로 초기화하겠습니다. 그리고 배열의 각 요소를 더하여 합계를 계산합니다. 그 다음에는 평균을 계산해야 하는데, 나눗셈을 하다보면 소수점까지 구해질 여지가 다분합니다. 그래서 평균을 저장할 변수 var, 분산을 저장할 변수 var, 표준편차를 구할..
안녕하세요!! 오늘 포스팅할 내용은 1차원 배열의 동적할당(Dynamic Allocation)입니다. 지난 포스팅에서는 1차원 배열의 정적 할당에 대해서 알아보았는데요. 정적 할당은 배열의 크기, 즉 메모리의 크기를 미리 정하고 사용하는 것이라고 설명드렸습니다. 하지만 프로그래밍에서는 배열의 크기를 정해서 쓰기보다는, 그 때 그 때 유동적으로 변동에서 사용해야 할 경우가 더 많겠죠? 이럴 때 필요한 것이 배열의 동적 할당입니다. 즉, 정적, 동적 할당의 차이는 프로그램의 시작 전에 메모리를 할당하느냐, 혹은 프로그램을 사용하면서 메모리를 할당하느냐로 정리해볼 수 있겠습니다. 1. 1차원 배열의 동적 할당-1 (new 사용하기) 1차원 배열의 동적 할당은 사용자가 얼마만큼의 메모리를 필요로 하는가에 따라 ..
안녕하세요! 오늘 포스팅 할 내용은 Array, 배열입니다. 배열이란, 말 그대로 여러 개의 원소의 묶음을 의미하는데요. 어떤 프로그래밍 언어든지 매우 중요하게 다루어지는 부분입니다. 그 이유는 배열을 사용해서, 동일한 타입의 변수들을 효율적으로 관리 및 사용할 수 있기 때문입니다. (참고로 C++에서의 배열은 Java, Python 등 기타 언어에서도 매우 유사하게 사용됩니다.) 그 중에서도 오늘은 1차원 배열, 그리고 1차원 배열을 정적할당하는 법에 대해 알아보겠습니다. 1. 배열(Array)이란? - 동일한 타입의 변수들을 한데 묶어 놓은 것. - 하나의 배열은 0개 이상의 원소들로 구성되어 있다. - 각각의 원소들은 각각 고유의 인덱스(index)를 가지며, 배열명과 인덱스로 접근 및 사용이 가능..