본문 바로가기
etc

백엔드 신입 개발자가 쌓아야 하는 역량은? - 자료구조/알고리즘/코딩테스트

by vita12321 2023. 6. 9.
728x90
반응형

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. 글을 마치며

지난주와 마찬가지로 아직 부족한 점이 많다고 느낀 한 주였다. 요행으로 문제를 풀기보단 기본에 충실해야겠다고 느꼈다. 현재는 너무 요행에 기대는 것 같다. 그러기 위해 코드를 정확하게 해석하고 이해하는 능력을 증진하고, 원리를 파악하는 능력을 갖춘 개발자가 되고자 한다. 기본기를 튼튼하게 쌓아 안정된 뿌리를 가지고 있는 개발자로 성장하고 싶다.

728x90
반응형