1. 자료구조
컴퓨터 프로그래밍에서 데이터를 저장, 조직화, 관리하는 방법을 말합니다. 데이터를 효율적으로 사용하기 위해서 적절한 자료구조를 사용하는 것이 중요합니다. 그러한 자료구조는 다양한 타입의 데이터들을 표현하고 알고리즘에라 처리하는 데 큰 역할
1) 배열 (Array) : 배열은 같은 타입의 데이터 원소들이 연속적인 메모리 공간에 순차적으로 저장된다. 배열은 빠른 접근 속도를 가지지만, 크기 변경이 어렵고 연속적인 메모리가 필요한 단점이 있다.
2) 링크드 리스트 (Linked List) : 링크드 리스트는 각 노드가 데이터와 다음 노드를 가리키는 포인터로 구성되어 있다. 링크드 리스트는 노드 생성 및 삭제가 용이하고, 메모리 할당이 유연하다. 하지만 임의 접근이 느린 단점이 있다.
3) 스택 (Stack) : 스택은 요소의 추가와 제거가 같은 쪽에서 이루어지는 Last-In-First-Out (LIFO) 방식의 자료구조이다 스택은 함수 호출 괄호 짝 맞추기 등에 활용되고, 효율적인 메모리 사용이 가능하다. 그러나 크기가 고정되거나 한정된 경우가 많아 넘치거나 모자라는 경우가 발할 수 있다.
4) 큐 (Queue) : 큐는 요소의 추가와 제거가 서로 다른 쪽에서생하는 First-In-First-Out (FIFO 방식의 자료구조이다. 큐는 프린터 스케줄링, 이벤트 처리 등에 사용되며, 순차적인 작업 처리에 효율적이다. 하지만 임의 접근이 느린 단점이 있다.
5) 힙(Heap) : 최댓값 또는 최솟값을 빠르게 찾기 위한 완전 이진 트리로 구현된 자료구조이. 우선순위 큐(Priority Queue)를 구현하는데 사용된다.
6) 트리 (Tree) : 트리는 계층적인 구조를 가진 노드들의 집합으로, 하나의 루트 노드와 여러 서브트리로 구성된다. 이진 트리, 이진 탐색 트리 등 다양한 종류의 트리가 존재하며, 데이터 정렬, 검색 관계 설정 등에 활용된다.
7) 그래프 (Graph) : 그래프는 노드와 이를 연결하는 간선들의 집합으로 이루어진 자료구이다.래프는 최단 경로 찾기, 네트워크 구조, 지도 정보 처리 등 다양한 분야에 활용된다.
8) 검색 (Search) : 검색은 원하는 데이터를 찾아내는 과정이다. 검색 알고리즘에는 선 검색, 이진 검색, 해시 검색 등이 있으며, 각각의 알고리즘은 데이터 구성, 정 상태 등에 따라 효율성이 달라진다.
9) 정렬 (Sorting) : 정렬은 데이터를 특정 순서로 나열하는 과정이다. 정렬 알고리즘에는 버블 정렬, 선택 정렬, 삽입 정렬, 합병 정렬, 퀵 정렬 등이 있고, 각 알고리즘은 효율성, 안정성, 비교 횟수 등의 관점에서 차이가 있다. 이를 활용하여 데이터를 적절한 순서로 정렬할 수 있다.
10) 해시 테이블(Hash Table) : 해시 함수를 통해 데이터를 저장하고 빠르게 검색할 수 있다. 특정 데이터를 찾기 위해 해시 값을 통해 직접 접근할 수 있어 검색 속도가 빠르지만 해시 충돌(Hash Collision)이 발생할 수 있다.
자료구조 공부의 중요한 점은 이해, 선택, 적용, 복잡도 분석, 기본 알고리즘 학습, 실습 및 반복, 그리고 확장 및 최적화의 숙달이다. 이를 통해 상황에 맞는 적절한 자료구조를 선택하고 효율적인 프로그래밍을 할 수 있다. 계속 연습하여 실력을 향상시키는 것이 중요하다.
2. 알고리즘 (Algorithm)
알고리즘은 한정된 자원(시간 및 공간) 내에서 데이터 처리를 위한 일련의 과정을 의미한다. 주어진 input을 통해 정해진 계산을 수행한 후 결과값을 output으로 제공한다. 알고리즘의 시간 복잡도는 크기가 증가하는 input에 대한 처리 시간을 Big O 표기법으로 나타낸다.
알고리즘은 검색, 정렬, 총합 계산 등 다양한 작업을 수행할 수 있다. 효율적인 알고리즘 학습을 위한 주요 방법은 다음과 같다:
1) Big O 변화 관찰: 인풋 크기가 커질수 알고리즘의 Big O 값이 어떻게 변화하는지 분석한다. 이를 통해 알고리즘의 성능을 이해하고 비교 수 있다.
2) 시간 및 공간 복잡도 학습: 알고리즘의 시간과 공간 복잡도를 파악하고 이해한다. 여러 알고리즘 중 최적의 해결 방안을 선택하게 도와준다.
3) 적절한 자료구조 선택: 특정 알고리즘에 가장 적합한 자료구조를 사용한다. 알고리즘과 자료구조 간의 상호작용을 이해함으로써 높은 효율성을 달성할 수 있다.
알고리즘의 핵심 개념을 파악하고, 공간 및 시간 복잡도를 고려하여 적당한 자료구조를 활용하면 다양한 문제를 효율적으로 해결하는 능력을 향상시킬 수 있다.
3. 코딩 테스트
코딩 테스트는 기업이 지원자의 개발 능력을 확인하는 과정
1) 논리적 분석 및 해결 전략 평가: 코딩 테스트는 지원자의 논리 분석력과 문제 해결 전략을 점검한다. 지원자는 시간 제한 내에 문제를 정확히 파악하고, 최선의 방법으로 해결책을 만들어야 한다.
2) 테크니컬 스킬 평가: 코딩 테스트를 통해 지원자의 프로그래밍 및 기술적 지식을 측정한다. 이 과에서 알고리즘, 자료구조에 대한 이해도 및 활용 능력을 확인할 수 있다.
4. 글을 마치며
지난주와 마찬가지로 아직 부족한 점이 많다고 느낀 한 주였다. 요행으로 문제를 풀기보단 기본에 충실해야겠다고 느꼈다. 현재는 너무 요행에 기대는 것 같다. 그러기 위해 코드를 정확하게 해석하고 이해하는 능력을 증진하고, 원리를 파악하는 능력을 갖춘 개발자가 되고자 한다. 기본기를 튼튼하게 쌓아 안정된 뿌리를 가지고 있는 개발자로 성장하고 싶다.
'etc' 카테고리의 다른 글
앞으로의 백엔드 공부 계획 (feat. 백엔드 공부법) (0) | 2023.06.02 |
---|---|
어떤 백엔드 개발자가 되고 싶은지 (백엔드 커리어 로드맵) (0) | 2023.05.26 |
프론트엔드와 백엔드 차이 / 백엔드 개발자가 되고 싶은 이유 (0) | 2023.05.17 |