이번주는 자료구조의 기초와 여러 알고리즘 문제를 풀어봤으며,
아래에는 이번주에 배운 6개의 자료구조를 간략히 정리해보았다.
가장 기본적인 데이터 구조로, 생성시 설정된 셀의 수가 고정되고 각 셀에는 인덱스 번호가 부여된다.
인덱스는 0부터 시작하고, 컴퓨터는 인덱스 0의 메모리 주소를 가지고 있고 이것으로 각 셀의 데이터에 접근할 수 있는 것이다.
인덱스 -1로 음수를 이용하면 배열의 뒷 요소부터 거꾸로 접근할 수 있다.
더 복잡한 자료 구조를 구현할때 이용되고, 엑셀의 스프레드시트처럼 직사각형의 테이블, 수학적 벡터및 행렬을 구현하는데 사용된다.
먼저 들어온 요소부터 쌓이며 순서가 보존되는 선형 데이터 구조이고, 마지막에 들어온 요소부터 처리하는 LIFO 매커니즘을 가지고 있다.
push(), pop() 을 이용하여 입력과 출력이 한 방향에서만 이뤄진다.
가장 마지막에 들어온 요소부터 다시 순차적으로 처리하고 싶을때 사용한다.
=> 브라우저의 뒤로가기, 실행취소, 재귀호출 등
가장 먼저 입력된 요소를 가장 먼저 처리하는 FIFO 매커니즘을 가지고 있다.
Rear에서는 append()를 이용하여 삽입만 이뤄지고, Front에서는 popleft()를 이용하여 삭제만 이뤄진다.
순서에 민감한 데이터나 특정 대기열 처럼 가장 먼저 입력받은 데이터 순으로 처리할때 이용된다.
메모리에 있는 요소의 물리적 배치를 이용하지 않고, 노드 포인터를 참조하는 시스템을 이용하는 데이터 구조이다.
각 노드에 데이터와, 다음 데이터를 가리키는 포인터가 같이 들어있다.
데이터 삽입 및 삭제시 배치의 재구성이 필요하지 않기 때문에 효율적이다.
대량의 정보를 저장하고 특정 요소를 효율적으로 검색할 수 있는 데이터 구조로, 테이블 내의 더 작은 서브 그룹인 버킷에 key-value를 한쌍으로 담고있다.
노드(or 정점)와 노드를 연결하는 간선으로 이루어진 자료 구조이다.
일주일간 다양한 자료구조와 여러 알고리즘 문제를 처음 접해보았기 때문에 현재 내가 공부하고 있는 방법이 맞는건지 의심도 든다.
현재는 문제를 많이 접해보지 못했기 때문에 솔직히 문제를 보고 어떤 방식으로 풀어야겠다 라는게 떠오르지 않아서 최대 1시간까지 고민한 뒤 다양한 풀이법을 보고 내가 이해하기에 적절한 코드를 찾아서 정리하고 코드를 봐도 이해하지 못하는 경우에는 디버깅으로 한 단계씩 다 풀어서 그려보거나 유튜브의 풀이 영상을 참고하고 있다.
문제는 비슷한 문제를 마주하더라도 자료구조를 전혀 매칭하지 못하거나 머릿속에 코드가 떠오르지 않기 때문에 현재 잘하고 있는건지 모르겠다.
우선, 자료구조에 대하여 조금더 깊이 공부하며 일주일 더 같은 방법으로 공부를 진행해보고 진전이 없다면 다른 방법을 찾아봐야 될 것 같다.