본문 바로가기

알고리즘 공부

1. 배열 (Array)

728x90
반응형
SMALL

출처: https://t1.daumcdn.net/cfile/tistory/180EB745514C39041E


배열이란? (A.K.A array)

프로그래밍 언어에서 지원하는 자료형 또는 컴퓨터 과학에서 사용하는 자료구조의 하나.

순서대로 번호가 붙은 원소들이 연속적인 형태로 구성된 구조를 뜻하며,

이때 각 원소에 붙은 번호를 흔히 첨자(인덱스, index)라고 부른다.

원소들이 연속적으로 배치되어 있기에, 임의의 첨자로 각 원소를 접근하는 데에 드는 시간복잡도는 O(1)이다.

따라서 임의 접근(random access)이 가능한 자료구조에 속한다.

메모리 주소가 연속될 것을 요구하기 때문에 배열의 크기를 늘리는 것은 절대 불가능하며,

배열의 크기를 늘릴 필요가 있을 때에는 크기가 큰 새 배열을 만들고 기존 내용을 복사하거나,

배열의 일부를 연결 리스트 등으로 다른 곳과 연결하는 등의 방법이 쓰인다.

출처: 나무위키 https://namu.wiki/w/배열

배열에서 할 수 있는 연산

  • 일정한 길이의 빈 배열을 만든다.

  • 배열의 길이를 알아본다.

  • 주어진 위치에 있는 원소를 알아본다. 원소를 찾는 데에 드는 시간은 O(1).

  • 주어진 위치에 새로운 원소를 대입한다. 마찬가지로 위치를 찾는 데에 걸리는 시간은 O(1).

  • 주어진 위치에 있는 원소를 삭제한다. 이때 배열의 길이가 하나 줄어들며 O(n)만큼의 시간이 걸린다.


C#에서의 1차원 배열

출처: http://bitly.kr /Nb0vH4i

*arr은 array의 약자이다.

*i는 index의 약자이다.

간단한 C#예제를 보자.

int[] i = new int [6] {1, 10, 100, 1000, 10000, 100000}; //물론 값을 나중에 지정해 줘도 무관
//i[0]~i[5] 이므로 6개 생성함.
i[2] = 3;
Console.WriteLine(i[2]); //출력 결과:3

string[] str = new string[10]
//str[0]~str[9] 이므로 10개 생성
str[8] = "Hello world";
Console.WriteLine(str[8]); //출력 결과: Hello World

간단히 표현함.

한 배열을 완성했다.

int[] i = new int [6] {1, 10, 100, 1000, 10000, 100000}; //물론 값을 나중에 지정해 줘도 무관
//i[0]~i[5] 이므로 6개 생성함.
i[2] = 3;
Console.WriteLine(i[2]); //출력 결과:3

코드 상으론 이부분만 표현한 것이다.

 

주의할점! i[0]은 배열의 첫번째 자리. i[2]는 배열의 세번째 자리이다.

 

즉. i[2] = 3 은 세번째 자리 1003으로 대입하라는 것이다.

 

*컴퓨터 언어에서 '='는 대입(入)을 의미한다. 

*수학에서 쓰는 등호를 컴퓨터 언어에서 표현하려면 '=='이렇게 한다.

 

따라서 

Console.WriteLine(i[2]); //출력 결과:3

의 출력결과는 100이 아닌 3이 된다.


C#에서의 2차원 배열

 

이미지 출처: https://t1.daumcdn.net/cfile/tistory/236A7E405642F1682C

이미지에서 알 수 있듯, 수학에서와 달리 컴퓨터 언어에서의 2차원 배열 행렬 표시는 좀 다르다.

0렬부터 시작하기 때문에 [0,0]이 존재한다. 이에따라 맨 오른쪽줄의 열은 0,4 1,4 2,4이다.

위 그림에서 같이 1,5 2,5 3,5가 아닌 0,4 1,4 2,4이다.

수학에선 분명 1행 5번째 열인데, 2차원 배열에선 열과 행 모두 0부터 시작했기 때문에 5에서 -1해준 4이다. 

이미지 출처: https://dojang.io/pluginfile.php/371/mod_page/content/22/unit37-2.png

이 사진도 잘 표현하였는데, 가로로 3줄이므로 [3] 세로로 4줄이므로 [4] 합쳐서 int numArr[3][4]가 된다.

칸 안의 값들은 임의의 숫자이다. numArr[0][0]의 값이라고도 할 수 있다. 

int numArr[3][4]를 C#으로 표현하면?

int[] i= new int [3, 4]

C# 예제 코드를 보자.

int[] i = new int [3, 5]; //가로로 3, 세로로 5 총 15개
i[1, 2] = 20;

이해하기 쉽도록.

그림을 보면 저 코드를 이해하기 쉽다.


C#에서의 3차원 배열

 

오토 캐드로 그린 3차원 배열

이해를 돕기위한 3차원 배열 구현이다.

출처:https://slidesplayer.org/slide/14727705/90/images/15/3%EC%B0%A8%EC%9B%90+%EB%B0%B0%EC%97%B4.jpg

이 사진 또한 이해를 돕기 위해 가져왔다.

출처: http://bitly.kr /eBZytNO

이해를 돕기 위한 사진 3.


C# 예제 코드.

int[] i = new int [3, 7, 5]; //앞으로 3, 세로로 7, 가로로 5 총 105개
i[0, 5, 2] = 30

3차원은 표현하기 정말 까다롭다.


이렇게 1차원, 2차원, 3차원 각각의 배열에 대해 정리했다.

까다롭지만, 숙지하고 나면 쉽다.

반응형
LIST

'알고리즘 공부' 카테고리의 다른 글

6. 선택 정렬  (0) 2019.09.22
5. 칵테일 정렬  (0) 2019.09.22
4. 버블 정렬  (0) 2019.09.22
3. 계산 복잡도 (시간복잡도,공간복잡도) 정리  (1) 2019.09.21
2. 알고리즘 정의  (0) 2019.09.20