목록분류 전체보기 (105)
yoongrammer
목차 스택(Stack) 구현하기 in Go 스택은 후입 선출 (LIFO) 원리를 따라 정렬된 데이터 구조입니다. golang에서 Slice를 사용하면 쉽게 스택을 구현할 수 있습니다. built-in 함수인 append를 사용하여 push를 구현합니다. 배열의 마지막 요소를 잘라내는 방식으로 pop을 구현합니다. 구현 Go 언어로 구현하면 다음과 같습니다. package main import "fmt" type Stack []interface{} //IsEmpty - 스택이 비어있는지 확인하는 함수 func (s *Stack) IsEmpty() bool { return len(*s) == 0 } //Push - 스택에 값을 추가하는 함수. func (s *Stack) Push(data interface{..
목차 스택(Stack) 구현하기 in C 스택 자료형을 구현하는 방법은 일반적으로 다음 방법들을 사용합니다. 배열 기반으로 구현 동적 배열을 기반으로 구현 연결 리스트로 구현 배열 기반으로 구현 배열을 사용하여 스택을 구현하는 방법입니다. 배열 index를 추적하는 top변수를 사용합니다. top은 -1로 초기화합니다. top이 -1이라면 스택이 비어있다는 의미이고 배열 크기-1이라면 스택이 가득 찼다는 의미입니다. push연산은 top을 1 증가시키고 값을 top위치에 저장하도록 구현합니다. pop연산은 top을 1 감소시키도록 구현합니다. C 언어로 구현하면 다음과 같습니다. #include #include #include typedef struct ArrayStack { int top; int ca..
목차 [Go] go get 알아보기 go get 명령어는 패키지 및 관련 종속성(dependency)을 다운로드 및 설치하는 명령어입니다. 패키지는 $GOPATH/src/ 경로에 저장됩니다. Usage: go get [-d] [-f] [-t] [-u] [-v] [-fix] [-insecure] [build flags] [packages] -d : 설치는 하지 않고 소스 파일만 다운로드합니다. -u : 패키지 및 해당 종속성을 업데이트합니다. -t : 패키지에 대한 테스트를 빌드하는 데 필요한 패키지도 다운로드합니다. -v : 진행 및 디버그 출력 자세한 옵션 설명은 go help get을 통해 확인할 수 있습니다. go get 사용하기 예를 통해 알아보도록 하겠습니다. 사전 작업 github에 있는 pl..
목차 [자료구조] 큐 (Queue) 큐는 먼저 집어넣은 데이터가 먼저 나오는 FIFO (First In First Out) 구조로 저장하는 선형 자료구조입니다. 실제 예로 매표소 대기열에서 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황과 비슷합니다. 나중에 집어넣은 데이터가 먼저 나오는 스택(Stack)과는 반대되는 개념입니다. 큐 표현 큐는 FIFO(First In First Out) / LILO(Last In Last Out) 순서를 따릅니다. FIFO : 처음 들어온 값이 처음에 나가는 것 LILO : 마지막에 들어온 값이 마지막에 나가는 것 큐에 끝(Rear)에서 요소를 추가하는 작업을 enqueue라고 하며 큐에 맨 앞(Front)에서 요소를 제거하는 작업을 dequeue라고 합니다. 가득 찬 ..
목차 [자료구조] 스택 (Stack) 스택은 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조로 되어 있습니다. 식당에 쌓여있는 접시들이 좋은 예입니다. 순서대로 쌓인 접시가 스택 구조와 같습니다. 접시가 필요하면 제일 위에 있는 접시부터 사용하며 가장 아래 있는 접시는 마지막에 사용됩니다. 스택은 LIFO (Last In First Out) / FILO (First In Last Out) 순서를 따릅니다. LIFO : 마지막으로 들어온 값이 처음으로 나가는 것 FILO : 처음 들어온 값이 마지막에 나가는 것 스택은 완전히 꽉 찼을 때 Overflow 상태라고 하며 완전히 비어 있으면 Underflow 상태라고 합니다. 삽입(Push)과 제거(Pop)는 모두 Top이라는 스택의 한쪽 끝에서만 일어납니..
목차 [자료구조] 연결 리스트 (Linked list) 연결 리스트는 데이터와 포인트로 구성된 노드 간의 연결(link)을 이용해서 리스트를 구현한 자료구조입니다. 연결 리스트는 배열의 고정크기의 단점을 보완하기 위해 만들어졌으며 배열과 달리 연속적인 메모리 공간에 저장되어 있지 않기 때문에 연결이 필요합니다. 연결 리스트 표현 연결 리스트는 아래 그림과 같이 포인터를 사용하여 각 노드를 연결합니다. 그림에서 알 수 있는 사실은 아래와 같습니다. Head 는 리스트의 처음을 나타냅니다. 노드는 데이터와 다음 노드를 가리키는 Next 포인터로 구성돼 있습니다. 각 노드는 next 포인터를 사용하여 다음 노드와 연결됩니다. 마지막 노드는 null을 가리켜 리스트의 끝을 나타냅니다. 시간 복잡도(Time co..
목차 [자료구조] 배열 (Array) 배열은 연속된 메모리 공간에 순차적으로 저장된 데이터 모음입니다 대부분에 프로그램 언어에서 동일 타입의 데이터를 저장합니다. 예를 들어 배열이 "int"타입인 경우 정수 요소만 저장할 수 있으며 double, float, char 등과 같은 다른 타입의 요소는 저장할 수 없습니다. 배열을 구성하는 각각의 값을 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자는 인덱스(index)라고 합니다. 배열 표현 C언어로 배열 선언을 해보겠습니다. 위 배열을 그림으로 표현하면 아래와 같습니다. 그림에서 알 수 있는 사실은 아래와 같습니다. 연속된 메모리 공간에 데이터들이 순차적으로 저장되 있습니다. C에서 인덱스는 0부터 시작합니다. 배열 크기는 10이므로 10개..
목차 자료구조(Data structure) 자료구조란 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법입니다. 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 합니다. 자료구조의 분류 자료구조는 선형구조와 비선형 구조로 구분됩니다. 선형 자료 구조(Linear Data Structure) 선형 자료 구조란 자료를 구성하는 원소들을 순차적으로 나열시킨 형태를 의미합니다. 대표적으로 리스트, 스택, 큐, 데크가 있습니다. 특징: 데이터가 순차적으로 배열되어 있습니다. 단일 레벨로 표현되기 때문에 단일 실행으로 모든 요소를 순회 할 수 있습니다. 메모리가 선형 방식으로 배열되기 때문에 구현하기 쉽습니다. 저장되는 자료의 전후관계가 1:1 입니다. 비선형 자료 구조(Non-linear..
목차 Docker 사용하기 Docker 명령은 docker run, docker push와 같이 docker 형식이며, 항상 root 권한으로 실행해야 합니다. docker 명령은 root 권한으로 실행해야 하기 때문에 일반 계정에서는 항상 sudo를 사용해하지만 번거롭다면 sudo를 입력하지 않는 방법이 두 가지가 있습니다. 1. 처음부터 root 계정으로 로그인하거나 sudo su 명령을 사용하여 root 계정으로 전환합니다. $ sudo su # 2. 현재 계정을 docker 그룹에 포함시킵니다. $ sudo usermod -aG docker ${USER} $ sudo service docker restart 현재 계정에서 로그아웃한 뒤 다시 로그인 한다. 만약 usermod group 'docke..
목차 [Go] JSON 패키지 알아보기 JSON (JavaScript Object Notation)은 간단한 데이터 교환 형식입니다. json 패키지를 사용하면 go프로그램에서 JSON 데이터를 읽고 쓸 수 있습니다. Encoding JSON 데이터를 인코딩하기 위해서는 Marshal 함수를 사용합니다. func Marshal(v interface{}) ([]byte, error) Marshal 함수는 v를 인코딩한 JSON 값을 반환합니다. Marshal 함수는 아래와 같은 규칙으로 데이터를 JSON으로 인코딩합니다. - Boolean 값은 JSON boolean 값으로 인코딩 됩니다. bolB, _ := json.Marshal(true) // true - Number(int, float)값은 JSON..