트리 (Tree) Tree란? 트리는 영어 단어 그대로 가지가 뻗어 있는 모양으로 노드와 간선으로 구성된 그래프의 일종이다. 그래프와 다른 점은 하나의 노드에서 다른 노드로 이동하는 경로가 유일하다는 점이다. 이를 Acycle이라고 한다. 트리는 폴더 구조, 조직도, 가계도 등 계층적 구조를 나타날 때 사용 한다. 트리의 구조 트리 구조의 자료 값을 담고 있는 단위를 노드(Node)라고 한다. 그리고 노드 간의 연결선을 에지(Edge)라고 한다. 이렇게 연결된 두 노드 중 상위의 노드를 부모(Parent) 노드, 하위의 노드를 자식(Child) 노드라고 한다. 그리고 같은 부모를 가지는 노드를 형제(Sibling) 노드라고 한다. 자신을 포함한 자식 노드의 개수를 크기(Size)라고 하며, 각 노드가 지..
현재 나의 Windows 11에 WSL로 Ubuntu가 설치되어 있다. 그리고 다음과 같은 시나리오를 가정하고 있다. 어느 서버에 설치된 리눅스 환경의 정보가 주어졌을때 외부 환경에서 해당 서버에 접속하여 데이터베이스를 설치하고, 내 윈도우 환경에서 해당 데이터베이스에 직접 접속 하고 싶다. 즉, 다음과 같이 서버의 데이테 베이스에 접속 하는 두가지 케이스에서 2번의 경우를 가정하고 있다. 리모트에서 서버로 접속 후 데이터 베이스에 접속 리모트에서 서버의 데이터 베이스로 바로 접속 위를 위해 Ubuntu 환경과 내 윈도우 환경에서 해줘야하는 작업들은 다음과 같다. openssh-server 설치 우선 설치해둔 우분투에 접속하고 openssh-server를 설치 해 준다. sudo apt install o..
개발환경 세팅을 위해 WSL (Windows Subsystem for Linux)로 내 Windows11에 Linux(Ubuntu)를 설치하고자 한다. Windows 10 버전 2004 이상(빌드 19041 이상) 또는 Windows 11이라면 이하의 과정을 통해 별도의 번거로운 설정 필요 없이 간단하게 내 윈도우 환경에 우분투 설치가 가능하다. WSL 이란 무겁고 번거로운 가상 머신 없이 몇 번의 커맨드 입력 만으로 간단하게 윈도우 환경에 리눅스를 설치 할 수 있는 기능이다.WSL 이란?WSL(Linux용 Windows 하위 시스템)은 별도의 가상 머신 또는 이중 부팅 없이 Windows 컴퓨터에서 Linux 환경을 실행할 수 있는 Windows의 기능입니다. WSL은 Windows와 Linux를 동..
힙(Heap)이란 ? 힙은 완전 이진트리 형태로 최대, 최소 값을 빠르게 찾아내는데 유용한 자료구조이다. 힙은 중복 값을 허용하며, 부모 - 자식 간 정렬은 보장하나 형제간의 정렬은 보장하지 않는다. (반 정렬 상태) 최소 힙( Min Heap) 최소 힙은 부모 노드의 Key가 자식 노드의 Key보다 작거나 같은 완전 이진트리이다. 최소 힙 - 삽입 트리의 가장 끝 위치에 데이터 삽입 부모 노드와 키 비교한 후 부모 보다 작을 경우 부모와 자리 교체 (반복) 최소 힙 - 삭제 최상위 노드 반환 및 삭제 가장 마지막 위치의 노드를 최상위 노드로 위치 시킴 자식 노드 중 작은 값과 비교 후 부모 노드가 더 크면 자리 교체 (반복) 최소 힙 - 구현 기본 구조 ArrayList heap; MinHeap() {..
Queue란? 큐는 선형 자료구조 중 하나로 가장 먼저 들어온 데이터가 가장 먼저 나가는 선입선출(FIFO, First-In-First-Out) 형태의 자료구조이다. 큐에서 가장 먼저 들어온 데이터를 Front라고 하며 가장 먼저 나가게(삭제)된다. Front가 나가고 나면 그 다음 데이터가 새로운 Front가 된다. 큐에서 가장 마지막에 입력된 데이터를 Rear라고 한다. 새로운 데이터는 기존 Rear 다음에 삽입되고 그 데이터가 새로운 Rear가 된다. Queue Interface Java에서 큐는 인터페이스(Interface)로 제공되며 주로 큐 인터페이스(Queue Interface)를 구현(Implement)한 연결리스트(LinkedList) (Queue Interface 를 상속받은 Deque..
프론트엔드와 백엔드의 차이 프론트엔드 vs 백엔드 프론트엔드와 백엔드의 차이를 빙산에 비유하여 자주 설명하곤 한다. 빙산은 수면 위로 보이는 부분과 수면 아래에 숨겨져 있는 부분이 있다. 수면 위로 노출되어, 사람들이 볼 수 있고 사진도 찍을 수 있는 부분 (상호작용)을 프론트엔드와 수면 위의 보이는 부분의 기초가 되고 받쳐주는 역할 (서버)을 하는 부분을 백엔드라고 할 수 있다. 우리가 네이버, 구글 등 웹 사이트에 접속했을 때 보이는 깔끔한 메뉴, 이미지, 레이아웃 등 상호작용하는 프론트엔드와, 보이진 않지만 화면에 데이터를 보내주고 사용자의 행동들을 처리하는 백엔드의 중요성은 매우 크다. 프론트엔드 프론트엔드 개발자는 사용자가 웹 페이지에 접속했을 때 보이는 모든 요소를 만드는 작업을 한다. 이는 ..
스택 (Stack) 스택 (Stack)이란? 스택 (Stack) 은 ` (깔끔하게 정돈하여) 쌓다` 라는 뜻으로, 물건 등을 쌓아 올리듯이 데이터를 쌓아 올려가는 자료 구조라고 할 수 있다. 스택은 그림과 같이 나중에 넣은 데이터가 먼저 나오게 되는 후입선출 (LIFO, Last In First Out) 구조를 가지고 있다. Push와 Pop 스택에 데이터를 추가하는 동작을 Push, 스택에서 데이터를 꺼내는 동작을 Pop이라고 한다. 자바에서는 java.util.Stack 클래스를 통해 스택을 제공하고 있다. stack.pop()은 스택의 마지막 데이터를 꺼내고 그 데이터를 반환해주며, stack.peek()은 스택의 마지막 데이터를 꺼내지 않고, 반환만 해준다. 알고리즘 문제에서 스택의 제일 마지막 ..
Windows 환경에서 IntelliJ를 설치 후 실행하게 되면 위와 같이 상단바의 메인메뉴가 보이지 않고, 로고 옆의 메뉴 버튼을 클릭해야 메인 메뉴가 나타나게 된다. 매번 메뉴 버턴을 누르기가 귀찮았었는데 오늘 우연히 이래저래 설정을 건드려보다가 디폴트로 메인 메뉴가 보이게 설정하는 방법을 알게 되었다. 방법은 다음과 같이 View -> Appearance -> Show Main Menu in Separate Toolbar를 체크해 주면 된다. 해당 기능을 활성화해 주면 다음과 같이 상단바의 메인메뉴가 항상 보이게 된다.