
트리의 개념 트리는 노드로 이루어진 자료 구조 트리는 하나의 루트 노드를 갖는다 루트 노드는 0개 이상의 자식 노드를 갖는다 그 자식 노드 또한 0개 이상의 자식 노드를 갖고, 이는 반복적으로 정의된다 노드들과 노드들을 연결하는 간선(edge)들로 구성되어있다 트리에는 사이클(cycle)이 존재할 수 없다 노드들은 특정 순서로 나열될 수도 있고 아닐수도 있다 각 노드는 부모 노드로의 연결이 있을 수도 있고 없을 수도 있다 각 노드는 어떤 자료형으로도 표현 가능하다 let Node = function (value) { this.value = value; this.children = []; }; 루트 노드(root node) 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다 단말 노드(leaf node..

OSI 7 계층을 설명해 주세요. OSI 7 계층은 통신이 일어나는 과정을 7단계로 정의한 국제 통신 표준 규약이다. 각 계층은 물리, 데이터 링크, 네트워크, 전송, 세션, 표현, 응용 계층으로 구성되어 있다. 물리 계층의 통신단위는 비트로, 0과 1로 구성된 데이터를 선으로 전달할 수 있도록 전기적인 신호로 변환시켜 주는 역할을 합니다. 대표적인 장치로 통신 케이블, 리피터, 허브 등이 있다. 데이터 링크 계층은 같은 LAN안의 연결된 컴퓨터들끼리 MAC (Media Access Control Address) 주소로 통신이 가능하게 해 줍니다. 데이터 전송은 Point-To-Point의 신뢰성을 보장하고, 전송되는 단위를 프레임이라 한다. 이더넷, 투 포인트 프로토콜, 근거리 네트워크 프로토콜 등이 ..

선택정렬 (Selection sort) 주어진 자료들 중에 현재 위치에 맞는 자료를 찾아 선택하여 위치를 교환하는 알고리즘. 한번 순회를 돌게 되면알고리즘 상 전체 자료 중 가장 작은 값의 자료가 0번째 인덱스에 위치하게 되므로, 그다음 순회부터는 1번 인덱스부터 순회를 돌며 반복하면 된다. 0번 인덱스 ~ n번 인덱스 중 가장 작은 값을 찾아 0번째 인덱스와 스왑 1번 인덱스 ~ n번 인덱스 중 가장 작은 값을 찾아 1번째 인덱스와 스왑 ... n-1번 인덱스 ~ n번 인덱스 중 가장 작은 값을 찾아 n번째 인덱스와 스왑 선택정렬은 현재 자료가 정렬이 되어있건 말건 무조건 전체 리스트를 순회, 검사하기 때문에 최선의 경우든 최악의 경우든 한결같이 O(n^2)의 시간복잡도를 가지고 있다. function..

시간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 수행 시간 분석 공간 복잡도: 특정한 크기의 입력에 대하여 알고리즘의 메모리 사용량 분석 시간 복잡도 시간 복잡도는 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미한다. 작성 방법에 따라 걸리는 시간이 달라지며, 시간이 적게 걸리는 것이 좋은 소스이다. 시간 복잡도에는 빅-오 표기법이라는 개념이 나온다. 예를 들어, 동전을 던져 뒷면이 나올 확률을 얘기 할 때 운이 좋으면 1번에 뒷면이 나오지만 운이 안 좋다면 n번 만큼 동전을 던져야 하는 경우가 발생한다. 이 최악의 경우를 계산하는 방식을 빅-오(Big-O) 표기법이라 부른다. O(1) Constant Time (상수) 입력 데이터 크기에 상관없이 언제나 일정한 시간이 걸리는 알고리즘. ..

리덕스(Redux) 리덕스는 가장 사용률이 높은 상태관리 라이브러리로서, 리액트의 복잡한 컴포넌트 구조속에서 보다 간편하게 모든 컴포넌트들이 state를 쉽게 공유할 수 있게 해주는 방식이다. 리덕스는 리액트 내부에 있는 기술이 아니며 순수 HTML, JavaScript 내에서도 사용이 가능하다. 리액트와 시너지가 좋으니 대체적으로 리덕스를 사용할 뿐이다. 리덕스를 언제 써야 할까? 프로젝트의 규모가 큰가? Yes: 리덕스 No: Context API 비동기 작업을 자주 하게 되는가? Yes: 리덕스 No: Context API 리덕스를 배워보니까 사용하는 게 편한가? Yes: 리덕스 No: Context API 또는 MobX 리덕스에서 자주 사용되는 키워드 액션(Action) State에 어떤 변화가 ..

useRef useRef는 저장공간(변수 관리), DOM 요소에 접근을 위해 사용이 되는 React Hooks이다. Ref는 'Reference'의 약자로, '참조'라는 뜻이다. 저장공간(변수 관리) 리액트 컴포넌트는 State가 변할 때마다 리렌더링이 되면서 컴포넌트 내부 변수들이 초기화가 된다. 내부 변수들이 초기화 된다는 것은 해당 컴포넌트 함수의 변수들이 모두 초기화가 되고 모든 함수 로직 등이 다시 실행되는 것을 의미합니다. 이렇게 원하지 않는 렌더링 때문에 곤란할 때, State 대신 Ref안에 값을 저장하면 불필요한 렌더링을 막을 수 있다. 또한 컴포넌트가 아무리 렌더링이 되어도 Ref안에 저장되어 있는 값은 변화되지 않고 유지가 된다. 변경 시 렌더링을 발생시키지 말아야 하는 값을 다룰 때..

Flux 패턴에 대해 설명해 주세요 Flux 패턴과 MVC 패턴의 차이점에 대해 설명해 주세요 Flux 패턴의 장점과 단점은 무엇인가요? Flux 패턴을 구현할 때 어떤 라이브러리를 사용할 수 있나요? 가장 널리 사용 되는 것은 Redux이다. Redux는 Flux 패턴을 기반으로 만들어 졌으며, React와의 통합이 매우 쉬워 많은 개발자들이 사용하고 있다. 그 외에도 Mobx, Fluxible, Reflux등이 있다. Redux의 작동 원리를 간단하게 설명해 주세요 액션(Action): 액션의 종류와 액션에 필요한 데이터를 전달하는 함수를 생성합니다. 스토어(Store): 애플리케이션의 상태와 액션을 처리하는 로직이 들어있는 객체입니다. 리듀서(Reducer): 이전 상태와 액션을 받아서 다음 상태를..

주어진 넓이를 주어진 타일로 채우는 문제인 타일링은 재귀적 사고방식으로 봐야 패턴을 확인 할 수 있다. f(1), f(2), f(3)... 같이 순차적으로 값을 파악하기보다 f(n), f(n-1), f(n-2) 같이 역순으로 파악하며 구조와 패턴을 찾아야 한다. 타일링의 패턴을 찾기위해 거쳐야 하는 과정은 다음과 같다. 맨 마지막에 들어갈 수 있는 타일의 경우의 수 찾기 => 넓이가 증가할 때마다 나타나는 특이 케이스 찾기 2xn 타일링 2 x 1 크기의 직사각형 타일로 2xn 넓이를 채우는 경우의 수의 개수 구하기 2xn을 채우는 경우의 수 개수 = f(n) f(n)에서 마지막에 오는 타일의 경우의 수는 두 가지 경우밖에 없다. 한 개가 세워져 있는 경우 두 개가 눕혀져 있는 경우 이런 패턴으로 보면 ..