# 문제에 따른 분류
1. 알고리즘 코딩테스트 - 문제별 능력을 평가
- 보통 5시간 내에 알고리즘 문제를 푼다.
- 알고리즘을 이용해 문제를 해결할 수 있는 능력을 평가한다.
2. 개발 과제 코딩테스트 - 실질적인 개발 능력을 평가
- 하나의 프로그램을 완성시키는 것을 시험한다.
- 시간단위에서 2주까지 보통 시간을 준다.
- 그 회사에서 실제로 사용하는 컴퓨터 언어나 프레임워크를 사용하도록 요구하기도 한다.
https://replit.com/ 웹사이트에서 코딩테스트를 위한 개발환경을 사용할 수 있다. - javascript를 연습할려면 기본적으로 node js를 골라주면 된다.
# 시험 환경으로 분류
1. 온라인 코딩테스트
- 문제를 보고 정답을 작성하면된다.
- 공채에서는 혼자 힘으로 풀게 표절 검사를 진행한다.
- 인터넷 검색은 가능하지만 단순하게 검색으로는 해결을 하기 힘든 문제를 출제한다.
2. 오프라인 코딩테스트
- 직접 시험장으로 가서 본다.
- 회사마다 인터넷 검색 가능 여부가 다르다.
- 대체로 제공되는 컴퓨터로 시험을 치뤄야한다.
자신만의 소스코드를 관리하는게 좋다.
- 자신의 코드 템플릿을 만드는 거다.
- 대표적인 알고리즘(정렬, 최단 경로 등)의 기본형의 코드를 미리 준비해놓는다.
예) https://github.com/ndb796/Python-Competitive-Programming-Team-Notes
# 최신 출제경향
- 대부분의 대기업은 공채에서 알고리즘 코딩테스트를 본다.
- 2~5시간내에 주어진 알고리즘 문제들을 해결해야한다.
- 구현, DFS/BFS(탐색), 탐욕 알고리즘 유형이 출제 빈도가 높은 편이다.
# 준비방법
- 일단 준비할 언어의 문법을 공부
- 알고리즘 유형별로 이론 및 핵심 문제를 10개 이상 풀어본다.
- 대표적인 알고리즘 유형: 정렬, DFS/BFS, 구현, 완전 탐색, 탐욕 알고리즘
- 가고싶은 회사의 기출 문제 풀어보기
# 기본적인 이론
# 시간복잡도
- 알고리즘의 성능을 나타내는 척도다.
- 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석
- 동일한 기능을 수행하는 알고리즘이 있으면 보통 복잡도가 낮을수록 좋다.
일정한 크기로 보여지는데.
빅오 표기법(Big-O Notation) 가장 빠르게 증가하는 항만을 고려한다.
- 함수의 상한을 나타낸다.
- 연산횟수가 3N^3 + 5N^2 + 1000000인 알고리즘이 있다고하면 N이 증가할수록 3N^3을 제외한 다른 항의 영향력은 작아진다. 차수가 가장 큰 항에서 계수를 제외하여 0(N^3)으로 표현이된다.
아래에서 위로 올라갈수록 속도가 빨라진다. (성능이 좋아진다.)
시간 복잡도 | 의미 |
O(1) | 상수 시간(constant time) - 단순하게 사칙연산 수행 |
O(logN) | 로그 시간(log time) - 알고리즘이 무엇을 반으로 쪼갤때 사용 (ex. 이분탐색) |
O(N) | 선형 시간(linear time) - 배열 안을 하나씩 확인할때 사용 |
O(NlogN) | 로그 선형 시간(log-linear time) - 일반적인 정렬알고리즘(병합정렬, 퀵정렬) |
O(N^2) | 이차 시간(quadratic time) - 동적개입법에서 넥센문제 등? |
O(N^3) | 삼차 시간(cubic time) - 플루이드 머신업 등? |
O(2^N) | 지수 시간(exponential time) |
일반적으로는 로그 시간정도만 기억하면 좋다.
# 알고리즘 설계
- 보통 문제에서 시간제한은 5초정도이다.
- 문제를보면 가장 먼저 시간제한(수행 시간 요구사항)을 확인해야한다.
예로 시간 제한이 1초인 문제라면
N의 범위가 500인 경우: 시간 복잡도가 O(N^3)인 알고리즘을 설계하면 문제를 해결할 수 있다.
N의 범위가 2000인 경우: 시간 복잡도가 O(N^2)인 알고리즘을 설계하면 문제를 풀수있다.
N의 범위가 100000이라면: 시간 복잡도가 O(NlogN)인 알고리즘을 설계하면 풀 수 있다.
N의 범위가 10000000이라면: 시간 복잡도가 O(N)인 알고리즘을 설계하면 풀 수 있다.
# 자료구조
대량의 데이터를 효율적으로 관리할 수 있는 데이터의 구조를 의미
- 대표적인 자료구조들
배열, 스택, 큐, 링크드 리스트, 해쉬 테이블, 힙 등
# 알고리즘
어떤 문제를 풀기 위한 절차/방법
'IT > 알고리즘, 코딩테스트' 카테고리의 다른 글
자료구조 개요 (0) | 2023.08.17 |
---|---|
(JavaScript) 코테를 위한 기본적으로 알아야할 문법 (0) | 2023.08.03 |
코딩테스트 공부방법 (0) | 2023.05.01 |
자료구조에 관한 고찰 (0) | 2023.02.08 |
자료구조와 함께 배우는 알고리즘 입문 - 자바 (0) | 2023.02.08 |