배열은 모두가 아는 배열이다. 배열을 만들어 사용하는 방법은 다양하다.
우선 기본적으로 함수안에 자료형을 이용하여 배열을 만들 수 있다.
int arr[x] = {0, };
x에는 임의의 수가 적혀있어야 한다. 배열을 생성할 때 변수를 이용해서 배열을 생성할 수 없다. 즉 x는 상수여야한다. 그래서 이러한 배열을 정적할당이라고 한다.
내가 원하는 만큼의 배열을 만들고 싶다면 동적할당이라는 방법을 사용해야한다. 처음보는 사람은 아마 어렵게 느껴질텐데 그냥 외우면 편하다.
int *arr = new int [x];
이 x는 변수로 만들어도 동작을 한다. 그래서 동적할당이라고 불린다. 동적할당된 배열을 사용하고 나면 꼭 delete[] arr;로 지워주어야 한다. 사실 안해도 오류는 안나지만 메모리를 잡아먹기 때문에 그렇다. 컴파일러가 친절하지 않으면 개발보드에 좋지 않을 것 같다.
또한 vector(벡터) 라이브러리를 사용하여 만들수도 있다. vector container 라고 한다.
#include<vector>
vector<int> str;
로 만들 수 있다. 이 벡터는 나중에 배열을 그때그때 추가할 수 있어 매우 편하다.
ex ) str.push_back('1');
printf("%c", str[i]);
이런식으로 사용할 수 있다. 생성과 사용법은 인터넷에 치면 친절히 나온다.
보통 크기가 작은 경우는 미리 만들어서 사용하면 편하고, 크기가 큰 경우는 벡터나 동적할당을 사용하면 편한 경우가 많다. 하지만 정확한 사용법을 외워놓지 않으면 나중에 분명 발목을 잡을 것 같다.
2차원 배열은 동적할당을 for문을 사용해야하므로 복잡하다. 2차원 벡터는 그나마 낫다. 제일 쉬운 것은 2차원 배열이다. 그래서 2차원 배열로 풀다가 동적할당을 써야할 것 같다면 2차원 벡터를 사용하는 편이 쉽고 빠르지 않을까 싶다. 왜냐면 벡터의 기능이 더 많기 때문이다.
stack(스택)은 목이 긴 그릇을 생각하면 사용법이 편하다. 목이 긴 그릇에 순서대로 넣는다고 생각하면 꺼낼 때에는 넣은 것의 역순으로 꺼내야한다.
FILO(first in last out )라고도 한다. 사용법은 vector와 비슷한다.
#include<stack>
stack<int> s;
push로 값을 저장하고 pop으로 값을 빼낸다. 이 또한 vector처럼 여러 기능이 있으니 찾아서 공부하는 것이 좋다. 최근에 보았던 스택문제는 다음과 같다.
사용법이 어렵지는 않아서 조금만 연습하면 금방 숙달할 수 잇다.
'공부 > 알고리즘(c++)' 카테고리의 다른 글
알고리즘 팁 - 시간초과가 뜰 때 대처. (0) | 2021.01.27 |
---|---|
알고리즘 공부/강의 - 4. 이분 탐색(검색),결정 알고리즘 (0) | 2021.01.23 |
알고리즘 공부/강의 - 3. sort 정렬문제 (0) | 2021.01.20 |
알고리즘 공부/강의 - 2. 반복문을 이용한 산수문제 (0) | 2021.01.17 |
알고리즘 잡담 - c와 python 차이 (0) | 2021.01.17 |