분류 전체보기
2주차(3) - ADT
2주차(3) - ADT
2021.03.01ADT(= Abstract Data Type) Data Type 1. 어떤 데이터의 집합 2. 그 데이터에 적용할 수 있는 연산의 집합 여기서 중요한 점은 Data Type이라는 개념이 단지 어떤 데이터의 집합만을 의미하는 것이 아니라 해당 데이터에 적용할 수 있는 연산의 집합까지도 함께 포함하는 개념이라는 것이다. 그렇기 때문에 어떤 Data Type을 정의할 때에는 단순히 어떤 데이터의 집합인 지만을 명시하는 것이 아니라 해당 Data Type에 적용할 수 있는 연산의 종류들도 함께 정의해 주어야함을 의미한다. 즉, 해당 Data Type에 적용할 수 있는 연산에 대한 정의도 Data Type에 대한 정의의 일부이다. Data Structure 데이터를 어떠한 규칙에 의해서 모아놓은 것 Data St..
2주차(2) - Stack(1)
2주차(2) - Stack(1)
2021.03.01Stack LIFO(Last In First Out)의 특성을 갖는 linear list 여기서 LIFO라는 표현은 'Last In First Out'의 줄임말로서 가장 마지막에 들어간 원소가 가장 먼저 나오는 형태의 구조를 가진 선형 자료구조를 말한다. 즉, stack은 사람들이 한 줄로만 탑승할 수 있으며, 앞문으로만 내릴 수 있는 버스를 생각하면 된다. Stack에 적용하는 2가지 연산 해당 용어들은 stack에만 적용되는 전용 용어라고 봐도 무방하다. 1. push 2. pop 1. push (= insert) stack에 한 개의 원소를 저장하는 연산 2. pop (= delete) stack으로부터 한 개의 원소를 추출하는 연산 즉, Stack으로부터 원소를 추출하면(pop 연산), 그 원소가..
2주차(1) - 알고리즘의 성능분석
2주차(1) - 알고리즘의 성능분석
2021.03.01알고리즘의 성능분석을 공부하는 이유? 우리가 프로그램을 개발함에 있어서 사용하거나 구상하게 되는 알고리즘은 지정된 범위 내에서 오류없이 잘 동작함을 보장함과 동시에 좋은 성능을 보여줘야 하기 때문이다. 또한 동일한 목표를 구현한 다양한 알고리즘들은 각자 다른 특징과 성능을 가지게 되는데, 이는 개발의 목적과 상황에 따라서 적절하게 선택되어야 하기 때문에 이를 위해서는 알고리즘의 성능평가를 적절하게 수행할 수 있어야 한다. 알고리즘 성능평가 시 고려되는 두 가지 요소 1. 시간 복잡도 (Time complexity) 2. 공간 복잡도 (Space complexity) 시간 복잡도 (Time complexity) 알고리즘의 수행(실행)시간에 대한 분석, 효율성을 평가하는 척도 공간 복잡도 (Space com..
1주차(2) - 데이터 구조 학습을 위한 C++ 언어 기초
1주차(2) - 데이터 구조 학습을 위한 C++ 언어 기초
2021.02.24여러가지 데이터 구조를 구현해보고 이를 실습하기 위해서는 C++ 언어에 대해서 어느정도 알아야할 필요성이 있음. C++ 언어의 특징 1. 객체지향적임. (객체지향 언어의 장점을 수용, C + OOP) 2. 기존 C언어의 모든 특징을 포함하는 언어임 (기존 C언어 프로그램과 호환) 3. 사용자가 정의하는 data type에 대한 특징을 지원함 (= class를 지원함) 4. 대규모 프로그래밍에 적합한 특징을 지원함. 5. 유용한 데이터 구조와 알고리즘을 지원하는 standard library를 지원함. C++ 프로그램의 기본 구조 기본적인 standard input/output 명령을 수행하기 위해서는 아래와 같은 기본적인 구성을 갖춰야 한다. #include using namespace std; int ..
1주차(1) - 알고리즘과 데이터 구조 개요
1주차(1) - 알고리즘과 데이터 구조 개요
2021.02.24데이터 구조 (Data Structure) Data Structure와 Algorithm의 기본 개념을 이해하고, 이를 활용하여 Software를 개발할 수 있는 능력을 갖추는 것을 목표로 하는 학문 Software 개발의 단계 소프트웨어는 일반적으로 다음 4가지의 과정으로 개발된다. 1. 요구사항 분석 2. 설계 3. 구현 4. 검증 1. Requirement Analysis (요구사항 분석) 문제의 요구사항, 입출력의 형식 및 내용들을 정의하고 분석 2. Design (설계) 개념적인 구성요소를 설계하고 이어서 상세한 내용을 설계 3. Coding (구현) (= implementation) 상세 설계된 내용을 프로그래밍 언어를 사용하여 구현 4. Verification(검증) 구현된 결과가 문제의 요..
make utility - 빌드를 편리하게!
make utility - 빌드를 편리하게!
2021.02.11make utility 프로젝트 빌드에 필요한 명령들을 Makefile 이라는 파일 내에 기술하여, 파일의 내용에 따라서 편리하게 프로젝트를 빌드할 수 있는 utility Makefile 생성 및 작성 프로그램 빌드 - make main 빌드 리셋 - make clean(현재까지 만들어진 모든 컴파일 결과물을 제거) make 프로그램 컴파일 / 빌드 작업을 실행할 때 사용하는 파일(Makefile)을 다루고 사용하는 유틸리티 Makefile make 실행 시 읽어들여 이 파일의 내용에 따라서 작업이 수행됨 make 사용 시 장점 프로젝트 빌드와 관련된 반복적인 명령들을 일괄적으로 실행함으로써 시간을 절약할 수 있다. 프로젝트 내의 파일 간 종속구조를 빠르게 파악할 수 있어 프로그램 소스 관리에 도움이 된..
Linux Command : more
Linux Command : more
2021.02.11more [option] file 파일의 내용을 읽어서 Shell에 단위로 끊어서 출력하도록 하는 명령어 이전에 언급했듯이 명령어와 반대되는 느낌의 명령어이다 - 뒤에서 그 이유를 살펴보도록 하겠다. 이 명령어는 위에서 아래 방향으로만 출력하기 때문에 한번 지나간 내용은 다시 볼 수 없다는 단점이 있다. 예시로 history 명령의 출력내용을 파이프라인 ' | ' 연산자를 이용해서 more.txt 라는 파일에 저장했다. 이 파일은 1000라인이 넘는 상당히 많은 내용을 저장하고 있는 파일이다. 이를 통해서 more명령어를 사용해보고 less 명령어와의 차이점을 살펴보자. 그렇다면 이에 반해 명령어 less를 사용하면 어떻게 될까? more의 경우 한번 스페이스바를 눌러서 다음 내용으로 넘어가면 이전의..
Linux Command : tee
Linux Command : tee
2021.02.10tee [option] file 어떠한 출력문을 Shell에서 출력함과 동시에 파일에도 동시에 저장하는 명령을 수행하는 명령어 리다이렉션을 이용하면 출력문을 파일에 저장을 할 수는 있지만 Shell 상에서는 볼 수 없게되는 데 이러한 문제를 tee 명령어가 아주 훌륭하게 해결해준다. 다음과 같이 tee 명령어는 shell 상에서 출력되는 메시지들을 별도로 파일로 저정해두고 싶을 때 다음과 같이 유용하게 사용할 수 있다. 그리고 tee 명령어는 몇가지 옵션을 지원하는 데 그 옵션들과 해당하는 기능들은 다음과 같다. -a : 출력되는 내용을 해당파일에 덮어쓰지 말고 추가하는 방식으로 입력 (이 외의 옵션들은 아직 이해가 어려우므로 차후에 다루도록 하겠다.)
Linux Command : tail
Linux Command : tail
2021.02.10tail [option] file head와는 반대로 파일의 뒷부분의 내용을 출력하는 명령어 사용법은 head와 거의 동일하다. 이전에 head 명령어를 공부하면서 사용했던 sample3.txt를 동일하게 사용해보도록 하겠다. head와 동일하게 옵션을 사용하지 않을경우 기본값은 10 라인으로 되어 있으며 head에서 출력하는 라인수를 조절하기 위해 사용해서 옵션 - 숫자 를 사용하면 동일하게 처리되는 결과를 확인할 수 있다. tail도 head처럼 이 이외의 여러가지 옵션들을 지원한다. 이 추가적인 옵션들에 대한 내용은 차후에 더 자세히 다루는 것으로 하겠다.
Linux Command : head
Linux Command : head
2021.02.10head [option] file 파일의 앞부분 내용을 보여주는 명령어 주로 대용량이 로그파일이나 문서파일을 다룰 때 행 수를 지정할 수 있어서 보고자 하는 분량을 조절하는 것이 가능하다. 뒤에서 다루게 될 tail 명령어와 함께 사용되는 경우가 많다. 본 사진은 작성자가 만든 sample3.txt의 일부 내용을 보인 것이다. 출력 내용을 보면 알겠지만 history 명령어의 출력결과를 저장한 것이다. sample3.txt 파일은 900라인이 넘는 많은 내용이 저장된 파일이지만 head 명령어를 사용하니 처음 10 라인만을 출력해준다. 여기서 옵션을 사용하면 출력할 라인 수를 사용자가 조절할 수 있는데 사용법은 다음과 같다. head [-count] file head는 이외에도 많은 옵션을 가지고..
Linux Command : wc
Linux Command : wc
2021.02.10wc [oprion] file 해당 파일의 라인 수, 단어 수, 문자 수 정보를 출력하는 명령어 wc도 다양한 옵션을 지원하는 데 각 옵션들에 대한 기능은 다음과 같다. -c : 문자 개수만 보여줌 -m : 캐릭터 수만 보여줌 -l : 라인수만 보여줌 -w : 단어 수만 보여줌 -L : 가장 긴 문장의 길이를 보여줌 여기서 보면 -c 와 -m은 같은 출력 결과를 보이는 데 왜 이러한 결과가 나오는 지는 차후에 이어서 설명하는 것으로 하겠다.
Linux Command : grep
Linux Command : grep
2021.02.10grep [option] [pattern] file 파일에서 특정한 패턴(문자열)을 탐색하는 명령어 grep 명령어는 탐색을 진행해서 해당 문자가 들어있는 파일을 찾아서 해당문자가 있는 행을 출력해준다. 다음과 같이 검색한 문자열을 바탕으로 해당 파일내에서 검색을 진행하여 이를 포함하고 있는 문자열들을 따로 보여준다. 만약 해당 파일내에 없는 문자열을 입력한다면 따로 없다는 메시지는 뜨지 않고 그냥 출력내용이 없이 명령어가 마무리 된다. grep도 다양한 옵션을 지원한다. grep의 다양한 옵션에 대한 내용들은 차후에 뒤에서 다시 다루는 것으로 하겠다.