반응형

 

객체지향이란?

- Object-Oriented Programming (OOP)

- 컴퓨터 프로그래밍의 패러다임 중 하나.

- 객체를 만들어 객체들 간의 상호작용을 통해 로직을 구성하는 방법이다.

  ※ 객체 : 독립된 단위

- 장점

  • 유지보수 용이 : 수정사항이 클래스 내부에 있기 때문에 쉽게 찾을 수 있다.
  • 대형프로젝트에 적합 : 모듈화가 가능하므로 다수가 참여하는 대형프로젝트에서 분담이 쉽다.

- 단점

  • 처리속도가 절차지향보다 상대적으로 느리다.
  • 설계에 많은 시간이 소요된다.

 

 

객체지향의 특징

- 추상화 (Abstration)

  • 대상의 특성을 제외한 공통점을 모아 정보화한다. (Class)

- 캡슐화 (Encapsulation)

  • 외부동작(함수)을 제외한 자신의 정보(변수)를 숨긴다. (정보은닉)

- 상속 (Inheritance)

  • 이전에 만들어진 Class의 기능을 상속을 통해 가져와 부모Class의 기능을 그대로 재활용이 가능하다.

- 다형성 (Polymorphism)

  • 약속된 부분만 유지한다면 한 요소에 여러 개념을 넣을 수 있다. (오버라이딩, 오버로딩)
반응형

'Stack > C++' 카테고리의 다른 글

C++ 파일 입출력 ofstream, ifstream  (0) 2021.10.16
C++ 생성자, 복사생성자, 소멸자 (+ const)  (0) 2021.10.15
C++ 동적할당 new, delete  (0) 2021.10.13
C++ 참조자(Reference)  (0) 2021.09.29
C++ 클래스, 객체, 인스턴스  (0) 2021.09.29
반응형

  ※ 원활한 설정을 위해 Homebrew를 먼저 설치한다.

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh


iTerm2 설치

- 맥 OS 터미널 대신 사용할 수 있는 가상 터미널

//Homebrew가 설치되어 있으면 밑의 커맨드를 붙여넣어준다.
brew install Caskroom/cask/iterm2

  ※ 터미널 설치가 싫다면 직접 iterm2에서 설치한다 : iterm2 페이지 바로가기

 

 

 

Oh my zsh 설치

- zsh 구성을 위한 오픈 소스 프레임워크이다.

- 다양한 플러그인의 조합이 가능해서 사용하기 편하다.

//터미널에 붙여넣으면 된다.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

 

 

 

 

Color theme 설정

- iTerm2에 사용할 컬러 테마를 설정한다.

 

Iterm Themes - Color Schemes and Themes for Iterm2

iTerm Themes Intro This is a set of color themes for iTerm (aka iTerm2). Screenshots below and in the screenshots directory. Installation Instructions To install: Launch iTerm 2. Get the latest version at iterm2.com Type CMD+i Navigate to Colors tab Click

iterm2colorschemes.com

  ※ 원하는 테마를 찾으면 테마 명을 클릭한다.

  ※ 테마 명을 클릭해서 해당 페이지로 들어가게되면 주소를 복사한다.

 

- 테마 다운받기

//-LO 다음에 복사해둔 주소를 붙여넣으면 된다.
curl -LO (복사한 주소)

//curl이 설치되어 있지 않은 경우
brew install curl

 

- iterm preferences(단축키 cmd + ,) - Profiles - Colors에 들어간다.

- 우측 하단의 Color Presets에서 Import를 눌러 다운 받은 테마를 불러온뒤 설정하면 된다.

 

 

 

Theme 설정하기

- iTerm2의 터미널 테마 설정방법이다.

  ※ 테마 명은 agonster이고 git을 사용할때 유용한 테마이다.

- 해당 테마를 설정하기 위해서는 .zshrc라는 파일을 수정하면된다.

//vi 편집기로 열기
vi ~/.zshrc
//or
//터미널에서 편집이 익숙하지 않다면 에디터로 열어서 수정한다.
//에디터로 열기
open ~/.zshrc

- 파일 내용 상단에 ZSH_THEME가 있는데 agonster로 변경한다음 저장하면 된다.

- 저장한 다음 적용해준다.

//적용
source ~/.zshrc

 

 

 

 

폰트 및 한글 깨짐 설정

- 다음 폰트를 다운받아 설치해준다.

 

GitHub - naver/d2codingfont: D2 Coding 글꼴

D2 Coding 글꼴. Contribute to naver/d2codingfont development by creating an account on GitHub.

github.com

 

- Preferences - Text에서 Font를 찾아 설정해준다.

- 추가로 유니코드를 설정해준다. (Unicode normalization form : NFC로 설정)

  ※ 한글이 깨지는 현상에 대한 해결법이다.

 

 

 

 

터미널에서 사용자 이름 삭제

- 터미널에서 사용자 이름이 길게 나오기때문에 이 부분을 삭제할 때 사용한다.

- 이것 역시 .zshrc파일을 수정해준다.

//vi 편집기로 열기
vi ~/.zshrc
//or
//에디터로 열기
open ~/.zshrc

//파일 최하단에 다음과 같이 추가
prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
  fi
}

//저장한 뒤 적용
source ~/.zshrc

  ※ 위와 같이 설정해주면 사용자명만 노출된다. 아예 비우고 싶으면 중괄호 사이에 내용을 모두 지워주면 된다.

 

 

 

 

New line 설정

- 터미널에서 긴 명령어를 쓰다보면 화면에서 벗어나는 경우가 많기때문에 이 문제를 해소하기위한 설정이다.

//vi 에디터로 수정
vi ~/.oh-my-zsh/themes/agnoster.zsh-theme

//텍스트 에디터로 수정
open -a TextEdit ~/.oh-my-zsh/themes/agnoster.zsh-theme

 

- build_prompt()를 찾아서 prompt_newlineprompt_hgprompt_end사이에 넣어준다.

build_prompt() {
  RETVAL=$?
  prompt_status
  prompt_virtualenv
  prompt_aws
  prompt_context
  prompt_dir
  prompt_git
  prompt_bzr
  prompt_hg
  prompt_newline
  prompt_end
}

 

 

- prompt_newline 추가 후 아래에 다음과 같이 추가한다.

prompt_newline() {
  if [[ -n $CURRENT_BG ]]; then
    echo -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR
%{%k%F{blue}%}$SEGMENT_SEPARATOR"
  else
    echo -n "%{%k%}"
  fi

  echo -n "%{%f%}"
  CURRENT_BG=''
}

 

 

 

 

Syntax highligh 설정

- 명령어들에 하이라이트를 넣어주는 기능이다.

//Homebrew로 설치한다
brew install zsh-syntax-highlighting

//.zshrc 터미널에서 열기
vi ~/.zshrc
//or
//에디터로 열기
open ~/.zshrc

//파일 하단에 다음 내용을 붙여넣어준뒤 저장한다.
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

//저장한 뒤 적용
source ~/.zshrc

 

 

 

 

자동완성

//zsh-ahtosuggestions 설치
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

//.zshrc 터미널에서 열기
vi ~/.zshrc
//or
//에디터로 열기
open ~/.zshrc

 

- plugins를 찾아 zsh-autosuggestions를 추가해준다.

 

- 터미널을 재시작해준다.

  ※ 자동완성의 더 자세한 설명은 다음 페이지를 참고

 

GitHub - zsh-users/zsh-autosuggestions: Fish-like autosuggestions for zsh

Fish-like autosuggestions for zsh. Contribute to zsh-users/zsh-autosuggestions development by creating an account on GitHub.

github.com

 

반응형

'Manage > Mac' 카테고리의 다른 글

맥 터미널 명령어(Terminal command) 모음  (0) 2021.09.23
반응형

텍스트 편집

텍스트 편집 vi (file name)
(텍스트 파일이 열린 뒤) 편집 i
(텍스트 파일이 열린 뒤) 저장 :w
(텍스트 파일이 열린 뒤) 종료 :q
(텍스트 파일이 열린 뒤) 저장하지 않고 종료 :q!
(텍스트 파일이 열린 뒤) 저장하고 종료 :wq
되돌아가기 esc

 

 

파일

파일 목록 보기 ls
파일 목록 보기 (숨겨진 파일 포함) ls -al
폴더 만들기 mkdir (folder name)

  ※ 폴더명 앞에 .이 붙으면 숨겨진 폴더라는 뜻이다.

 

인터넷

IP 확인 ifconfig

 

반응형

'Manage > Mac' 카테고리의 다른 글

맥 iterm2 환경 만들기  (1) 2021.09.23
반응형

 

퀵정렬(Quick Sort)

- 찰스 앤터니 리처드 호어가 개발한 알고리즘이다.

- 평균 O(n log n)으로 매우 빠른 정렬속도를 자랑한다.

- 기준(Pivot) 값을 기준으로 나머지 원소에 대해 대소관계를 비교하여 큰 것과 작은 것으로 이분한 다음 다시 해당 작업을 반복한다.

  ※ 이와 같이 문제를 작은 문제로 분할하여 해결하는 방법을 분할 정복(Devide and Conquer)이라 한다.

 

 

 

원리(오름차순 기준)

  1. Pivot의 값은 배열의 제일 오른쪽 원소로 정한다.

    ※ Pivot의 위치는 정해져있지 않다. (왼쪽도 되고 중앙도 된다.)

  2. Low는 오른쪽으로, High는 왼쪽으로 돌면서 각 원소를 Pivot 원소와 대소관계를 파악한다.

    2-1. Low는 Pivot보다 작아야한다. 즉, Pivot의 값보다 크면 순회를 멈춘다.

    2-2. High는 Pivot보다 커야한다. 즉, Pivot의 값보다 작으면 순회를 멈춘다.

    2-3. Low와 High의 값을 SWAP한다.

  3. Low와 High가 교차할때까지 2번의 작업을 반복한다.

  4. Low와 High가 교차를 하게되면 Low와 Pivot의 값을 SWAP한다.

  5. Pivot의 값을 기준으로 왼쪽 원소들은 Pivot보다 작은 값들, 오른쪽 원소들은 큰 값들만 있으므로, 왼쪽과 오른쪽의 원소들을 분할하여 1 ~ 4번의 과정을 반복한다.

    ※ Left와 Right가 더이상 쪼개지지 않을때까지 반복한다. (재귀함수를 이용)

    ※ Pivot을 기준으로 두개의 배열로 나누는걸 파티션(Partition)이라고 한다.

 

 

 

코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX 10
#define ASCENDING 1
#define DESCENDING 2

void SetArr(int arr[])
{
    for (int i = 0; i < MAX; i++)
    {
        arr[i] = rand() % 100;
    }
}

void PrintArr(int arr[])
{
    for (int i = 0; i < MAX; i++)
    {
        printf("%d\n", arr[i]);
    }
}

void Swap(int* n1, int* n2)
{
    int tmp = *n2;
    *n2 = *n1;
    *n1 = tmp;
}

int Sorting(int arr[], int left, int right, int sortType)
{
    int pivot = right;
    int low = left, high = pivot - 1;
	
    while (low <= high)
    {
        switch (sortType)
        {
        case ASCENDING:
            //find low index
            for (; low <= high && arr[low] <= arr[pivot]; low++);
            //find high index
            for (; high >= low && arr[high] >= arr[pivot]; high--);
            break;
        case DESCENDING:
            //find low index
            for (; low <= high && arr[low] >= arr[pivot]; low++);
            //find high index
            for (; high >= low && arr[high] <= arr[pivot]; high--);
            break;
        }
		
        if (low <= high)
        {
            Swap(&arr[low], &arr[high]);
        }
    }
	
    Swap(&arr[low], &arr[pivot]);
    return low;
}

void QuickSort(int arr[], int left, int right, int sortType)
{
    if (left >= right) return;
	
    int pivot = Sorting(arr, left, right, sortType);
	
    //Left partition
    QuickSort(arr, left, pivot - 1, sortType);
    //Right partition
    QuickSort(arr, pivot + 1, right, sortType);
}

void main()
{
    srand(time(NULL));
    int iArr[MAX] = { 0 };
	
    SetArr(iArr);
	
    QuickSort(iArr, 0, MAX - 1, ASCENDING);
    //PrintArr(iArr);
	
    QuickSort(iArr, 0, MAX - 1, DESCENDING);
    //PrintArr(iArr);
}
반응형

'Stack > Algorithm' 카테고리의 다른 글

[유니티 C#] 퀵 정렬(Quick sort) 구현  (0) 2022.10.06
문자열, 숫자 뒤집기  (0) 2021.10.16
삽입정렬(Insertion Sort) 구현  (0) 2021.09.18
선택정렬(Selection Sort) 구현  (0) 2021.09.15
버블정렬(Bubble Sort) 구현  (0) 2021.09.14
반응형

 

삽입정렬(Insertion Sort)

- 제자리 정렬 알고리즘의 하나이다.

- 카드를 순서대로 정리할때와 같은 방법이다.

- 선택정렬과 유사하지만 좀 더 효율적인 정렬이다. (시간복잡도는 O(n^2)로 동일하다.)

 

 

 

원리(오름차순 기준)

  1. 첫 번째 원소는 앞의 원소가 더 이상 존재하지 않으므로, 두 번째 원소를 기준 원소로 잡고 시작한다.

  2. 기준으로 잡은 원소의 앞(왼쪽)을 차례로 비교하면서 위치를 바꿔준다.

    ※ 즉, 두 번째 원소는 첫 번째 원소와 비교, 세 번째 원소는 두 번째, 첫 번째 원소와 비교하는 식이다.

 

 

 

코드

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 10

void SetArr(int arr[])
{
    for (int i = 0; i < MAX; i++)
    {
        arr[i] = rand() % 100;
    }
}

void PrintArr(int arr[])
{
    for (int i = 0; i < MAX; i++)
    {
        printf("%d\n", arr[i]);
    }
}

void InsertionSortAscending(int arr[])
{
    for (int i = 1; i < MAX; i++)
    {
        int j = i - 1;
        int current = arr[i];
		
        while (j >= 0 && arr[j] > current)
        {
            arr[j + 1] = arr[j];
            j--;
        }
		
        arr[j + 1] = current;
    }
}

void InsertionSortDescending(int arr[])
{
    for (int i = 1; i < MAX; i++)
    {
        int j = i - 1;
        int current = arr[i];
		
        while (j >= 0 && arr[j] < current)
        {
            arr[j + 1] = arr[j];
            j--;
        }
		
        arr[j + 1] = current;
    }
}

void main()
{
    srand(time(NULL));
    int iArr[MAX] = { 0 };
	
    SetArr(iArr);
	
    InsertionSortAscending(iArr);
    //PrintArr(iArr);
	
    InsertionSortDescending(iArr);
    //PrintArr(iArr);
}
반응형

'Stack > Algorithm' 카테고리의 다른 글

[유니티 C#] 퀵 정렬(Quick sort) 구현  (0) 2022.10.06
문자열, 숫자 뒤집기  (0) 2021.10.16
퀵정렬(Quick Sort) 구현  (0) 2021.09.19
선택정렬(Selection Sort) 구현  (0) 2021.09.15
버블정렬(Bubble Sort) 구현  (0) 2021.09.14

+ Recent posts