[자료구조] 배열과 리스트 그리고 벡터
📚 Do it! 알고리즘 코딩테스트 (c++편)
배열(Array)
메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조
⇒ 값이 떨어져 있으면 안된다.
int arr[5] = {1, 2, 3, 4, 5};
배열의 특징
- 인덱스를 사용하여 값에 바로 접근
- 새로운 값을 삽입, 특정 인덱스에 있는 값을 삭제가 어렵 (push X, delete X)
- 값을 삽입하거나 삭제하려면 해당 인덱스 주변의 값을 이동시키는 과정이 필요
- 배열의 크기는 선언할 때 지정 → 한 번 선언하면 수정 불가능 (정적 배열)
- 구조 간단
리스트(List)
값과 포인터를 묶은 노드를 포인터로 연결한 자료구조
#include <list>
std::list<int> myList;
myList.push_back(10);
리스트의 특징
- 인덱스가 없음 → 값에 접근하려면 Head 포인트부터 순서대로 접근 → 접근 속도가 느리다.
- 포인터로 연결되어 있어 데이터를 삽입하거나 삭제하는 연산 속도가 빠름
- 선언할 때 크기를 지정하지 않아도 됨 → 크기가 변하기 쉬운 데이터를 다룰 때 적절
- 포인터를 저장할 공간이 필요해 다소 복잡
벡터(Vector)
C++ 표준 라이브러리에 있는 자료구조 컨테이너 중 하나로, 배열의 단점을 보완한 동적 배열의 형태
#include <vector>
vector<int> A;
A.push_back(1);
벡터의 특징
- 동적으로 원소 추가 → 크기 변경 가능 (동적 배열)
- 맨 마지막 위치에 데이터를 삽입하거나 삭제는 문제 없음
- 중간 데이터의 삽입 삭제는 배열과 같음
- 배열과 마찬가지로 인덱스를 이용해 각 데이터 직접 접근
문제 풀이
char to int ⇒
- '0'
int to char ⇒+ '0'
string to _ ⇒stoi(), stol(), stod(), stof()
_ to string ⇒to_string()
https://github.com/KimGyeongLock/CodingTest/blob/main/111720.cpp
/ (나누기)할때 정수로 받는지 실수로 받는지 주의
https://github.com/KimGyeongLock/CodingTest/blob/main/1546.cpp