본문 바로가기

컴퓨터 공학 기초지식

(7)
Time Complexity 시간복잡도란 문제를 해결하는데 걸리는 시간과 입력의 함수관계를 가리킵니다. 주로 빅-오 표기법을 사용하며 나타내며, 이 표기법은 계수와 낮은 차수의 항을 제외시키는 방법입니다. 쉽게 말해, 작성한 코드가 시간이 얼마나 걸리는지 나타내는 방법으로, 최악의 경우 얼마나 시간이 걸릴지 예상해보며, 다른 효율적인 방법을 찾기 위해 사용하게 됩니다. 대표적인 시간 복잡도들을 간단하게 정의해보면, 1) O(1) - constant : 입력값 n이 주어졌을 때, 알고리즘이 문제를 해결하는데 한 단계 만 거칩니다. 2) O(log n) - logarithmic : 입력값 n이 주어졌을 때, 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듭니다. 3) O(n) - linear : 문제를 해결하기 위한 ..
Advanced Data Structure 1. Linked List (연결 리스트) 연결 리스트는 각 노드가 데이터와 포인터를 가지고 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 배열과 비교 했을 때, 데이터를 삽입/삭제 할 경우 데이터의 재구성에 용이하다. 반면 특정 위치의 데이터를 검색하기 위해서는 연결리스트를 처음부터 끝까지 순회해야 하므로 비효율적이다. *종류 1) 단일 연결 리스트 각 노드에 데이터 공간과 한개의 포인터 공간이 있고, 포인터는 다음 노드를 가리킨다. 2) 이중 연결 리스트 단일 연결리스트와 비슷하지만, 포인터 공간이 두 개가 있고, 각각의 포인터는 앞의 노드와 뒤의 노드를 가리킨다. 3) 원형 연결 리스트 일반적인 연결리스트에 마지막 노드와 처음..
Basic Data Structure 1. Stack 스택은 위의 그림과 같이 처음 들어간 요소가 마지막에 나오는 특징(FILO)을 가지고 있습니다. 빈 stack에 value가 차곡차곡 순서대로 쌓이고, value를 제거할 때에는 가장 마지막에 쌓였던 것부터 제거됩니다. 구현방법에는 배열을 사용하는것과 연결리스트를 사용하는 것 두가지가 있습니다. 두가지 방법의 장단점은 다음과 같습니다. 1) 배열로 구현하였을 때 (장점 ) 구현이 쉽다. 원하는 데이터의 접근 속도가 빠르다. (단점) 데이터 최대 개수를 미리 정해야 한다. 데이터의 삽입과 삭제에 있어 매우 비효율적이다. 2) 연결 리스트로 구현하였을 때 (장점) 데이터의 최대 개수가 한정되어 있지 않다. 데이터의 삽입 / 삭제가 용이하다. (단점) 한번에 원하는 데이터에 접근이 불가능하다...
Basic information of Programming $ 프로그래밍 언어 : 1. 기계어 : 컴퓨터가 사용하는 언어 (2진수로 구성) (저급언어라고 표현할 수 있음) 2. 어셈블리어 : 기계어에서 숫자를 의미있는 단어로 바꿔서 사람들이 이해하기 쉽게 만든 언어 3. 고급언어 : 사람들이 이해하기 편하도록 만들어진 프로그래밍 언어 (ex. C, C++, JAVA, Java Script) => 고급언어로 갈수록 작성하기가 쉽지만 속도는 느려진다. $ 언어의 종류 1. 절차지향적 언어 : 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법 (ex. C언어) (장점) 컴퓨터의 처리구조와 유사해 실행속도가 빠르다. (단점) 유지보수가 어렵다. 실행순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다. 2. 객..
Jest와 Prettier Jest 1. What is Jest? Jest 는 test case를 통해 코드가 제대로 동작하는지 확인하는 '테스팅 프레임워크' 입니다. ESlint 가 코드 스타일 rule을 정하는 것이라면, Jest를 통해서는 코드가 올바른 기능을 하는지 체크할 수 있습니다. 2. Getting Started sprint directory 의 root 에서 Jest 라이브러리를 개발 의존성(devDependencies)으로 설치합니다. yarn 혹은 npm을 이용하여 간단하게 설치 가능합니다. npm install --save-dev jest Tip* --save-dev 는 모듈을 개발 의존성으로 설치한다는 의미의 명령어로, 해당 모듈은 package.json의 dependencies 가 아닌 devDepende..
Lint 와 Test Linting & Testing console.log 등을 사용하여 매뉴얼하게 테스트를 할 수도 있지만, 여러 사람과 협업을 하거나 프로젝트의 규모가 커질 경우, console.log 만으로 테스트를 하는 것은 여러 면에서 부족합니다. 그래서 테스트를 자동화하기 위해 karma, mocha, chai, jest, jasmine 등과 같은 툴을 사용합니다. Linting? 코드 스타일을 지키는지 체크해 주는 툴입니다. 읽기 좋은 코드, 유지 보수하기 좋은 코드를 만드는 데 큰 도움이 됩니다. 특히 협업 시, 일관된 코드 스타일 유지에 큰 도움이 됩니다. 특히 우리가 주로 사용하는 언어인 자바스크립트는 동적(dynamic)이고 타입 면에서 비교적 덜 엄격한(loosely-typed) 언어이기 때문에, 린터의..
런타임과 NVM 런타임이란 프로그래밍 언어가 돌아가는 환경! Node는 자바스크립트 런타임이다. NVM (Node Version Manager) : 이미 설치된 다양한 노드 버전들을 손쉽게 옮겨다닐 수 있게 도와주는 프로그램 package.json : 어떤 프로그램을 실행시키기 위해 필요한 모듈들이 무엇인지, 프로그램을 실행시키는 방법, 프로그램을 테스트ㅏ는 방법등이 명시되어 있다. ( *** 프로그램을 실행시키기 위해 필요한 실제 모듈은 node_modules폴더에 들어가 있음) 1) dependencies : 이 프로젝트가 돌아가기 위해 반드시 필요한 모듈들이 무엇이지 적혀있다. 2) devDependencies : 이 프로젝트를 개발하는 환경에서 필요한 모듈들이 무엇인지 적혀있다. 3) scripts : npm으로..