GitHub에서 원격저장소를 만든 뒤 Git Bash를 활용하여 Push하는 방법입니다. GitHub Repository 생성 1. 아래 URL을 클릭하여 GitHub로 들어간 뒤 로그인 하고 좌측 상단에서 저장소 NEW 버튼을 클릭합니다. https://github.com/ 2. 생성 할 Repository의 주소와 설명등 상세 설정을 한 뒤 저장소 생성을 클릭하여 Repository를 생성합니다. git bash에서 소스 push 1. 원하는 소스폴더에서 git bash를 실행시킵니다. 2. $ git init/p> 깃을 init 시켜줍니다. (로컬저장소 만들기) 3. $ git status 올라가 파일이 있는지 현재 폴더에 있는 파일들을 확인합니다. 지금은 파일들이 빨간색으로 되어있지만 add작업을..
GIt을 사용하려면 먼저 Git이 PC에 설치되어 있어야합니다. Git설치방법에 대해 알아봅니다. 윈도우버전 Git설치하기 1. Git 설치파일을 다운로드 받습니다. 아래에 링크되어 있는 페이지에 들어가서 자신의 OS에 맞는 Git 설치버전을 받아주세요. Git다운로드 링크 바로가기 2. 약관을 읽어주고 Next를 눌러줍니다. 3. 설치경로를 선택하고 Next를 눌러줍니다. 4. 설치할 Component들을 선택합니다. 저는 기본으로 선택되어 있는것 이외에는 추가로 설치하지않고 Next를 눌러 진행하겠습니다. 5. 시작 메뉴에 폴더를 만듭니다. 시작메뉴에 폴더를 추가하고 싶지 않다면 Don't create a Start Menu folder 체크박스를 클릭하고 Next를 눌러주세요. 6. 깃의 기본에디터..
비쥬얼 스튜디오에서는 Ctrl + F5를 사용하여 디버깅 하지 않고 시작할 수 있습니다. 이렇게 하면 바로 명령 프롬프트(cmd)창이 실행되면서 결과값을 확인할 수 있죠. 하지만 어떠한 이유인지는 모르겠으나 비쥬얼 스튜디오를 켜고 빈프로젝트를 하고 실행을 시켰는데 콘솔창이 시작과 동시에 계속 꺼졌습니다. 본래는 프로그램이 시작되고 프로그램이 종료되면 cmd창은 꺼지는것이 맞습니다. 하지만 이렇게 콘솔창이 사라지게 되면 짜놓은 소스코드의 결과물을 확인할 수 없기때문에 Visual Studio는 자동으로 프로그램이 종료되기 직전에 프로그램을 멈추어주는것으로 알고 있었는데 어떠한 이유인지는 모르겠으나 이 부분이 제대로 작동이 되지 않고 있었던 것 같습니다. system("pause"); 코드를 마지막에 삽입하..
스프링 부트(Spring Boot)란? 스프링 부트는 스프링 설정에서 반복되는 코드를 싹 빼고 간편하게 이용할 수 있도록 확장된 버전입니다 스프링은 스프링부트와 비교하여 여러가지 장점이 있습니다. 개발을 하며 가장 와닿는 장점은 설정이 매우 간편해졌다는 점입니다. 스프링의 경우 많은 XML설정 파일등을 작성하는 등 설정하기도 힘들고 웹을 구축하기 위해 많은 Dependency 설정을 추가해주는 등 설정을 위한 코드의 양도 굉장히 많았지만 스프링부트에서는 starter 라이브러리 사용으로 많이 간소화 되었습니다. 이렇게 스프링 부트는 반복되는 개발환경 구축을 위한 코드작성등의 노력을 줄여주고 쉽고 빠르게 프로젝트를 설정할 수 있도록 도와줍니다. 또한 Maven보다 강력한 Gradle이라는 빌드배포 툴을 제..
정렬 별 특징 선택정렬 (Selection Sort) 선택정렬은 앞에서부터 차례대로 정렬하는 방법입니다. 먼저 주어진 리스트 중에 최소값을 찾고 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 진행하는 정렬방법입니다. 코드가 직관적이기에 구현도 비교적 간단합니다. n개 원소에 대해 n개의 메모리를 사용하기에 데이터를 하나씩 정밀 비교가 가능하며 정렬을 위한 비교 횟수는 많으나 교환 횟수는 상당히 적다는 것이 장점인 정렬 방식입니다. 따라서 교환이 많이 이루어져야하는 자료 상태에서 가장 효율적으로 적용될 수 있는 정렬 방식입니다. 선택 정렬이 가장 적합한 자료 상태는 역순 정렬입니다. 즉, 내림차순으로 정렬되어 있는 자료를 오름차순으로 재정렬할 때 최적의 효율을 보여줍니다. 반대로 이미 정렬된 상태에서 소..
너비 우선탐색 (BFS)란? BFS는 그래프 전체를 탐색하는 방법 중 하나로써 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법입니다. 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 순회함으로써 노드를 넓게(wide) 탐색합니다. 주로 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 사용합니다. 주로 구현은 큐라는 자료에 이웃하는 정점을 다 담아놓고 차례대로 POP을 하는 방식으로 구현합니다. [Algorithm] 자료구조 그래프(Graph)란 무엇인가? BFS의 장점 1. 노드의 수가 적고 깊이가 얕은 경우 빠르게 동작할 수 있다. 2. 단순 검색 속도가 깊이 우선 탐색(DFS)보다 빠름 3.너비를 우선 탐..
깊이 우선탐색 (DFS)란? DFS는 그래프 전체를 탐색하는 방법중 하나로써 시작점 부터 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하고 넘어가는 방법입니다. 스택이나 재귀함수를 통해서 구현할 수 있는데 재귀함수가 구현이 간편하기에 대부분 재귀함수로 구현하는것 같습니다. 구현시 주의할점은 노드를 방문시 방문 여부를 반드시 검사해야합니다. 그렇지 않다면 무한루프에 빠질 수 있습니다. [Algorithm] 자료구조 그래프(Graph)란 무엇인가? DFS의 장점 1. 현재 경로상의 노드들만 기억하면 되므로, 저장 공간의 수요가 비교적 적음 2. 목표 노드가 깊은 단계에 있는 경우 해를 빨리 구할 수 있음 3. 구현이 너비 우선 탐색(BFS) 보다 간단함 DFS의 단점 1. 단순 검색 속도는 너비 우선..
그래프란? 그래프는 정점과 간선으로 이루어진 자료구조입니다. 정확히는 정점(Vertex)간의 관계를 표현하는 조직도라고 볼수도 있겠습니다. 그런면에서 트리는 그래프의 일종인 셈입니다. 다만 트리와는 달리 그래프는 정점마다 간선이 없을수도 있고 있을수도 있으며 루트 노드, 부모와 자식이라는 개념이 존재하지 않습니다. 또한 그래프는 네트워크 모델 즉, 객체와 이에 대한 관계를 나타내는 유연한 방식으로 이해할 수 있습니다. 실생활에서 다양한 예를 그래프로 표현할 수 있습니다. 대표적으로 지하철 노선도, 도심의 도로등이 있습니다. 이런식으로 활용할 수 있는 방법이 많기에 문제도 다양하게 출제를 할 수 있습니다. 그래프는 알고리즘에서 굉장히 많이 사용됩니다. 특히 그래프를 순회하는 방식인 DFS와 BFS를 잘 알..
공간복잡도란? 공간복잡도(Space Complexity)란 프로그램의 성능을 분석하는 방법 중 하나로, 작성한 프로그램이 얼마나 많은 공간(메모리)을 차지하느냐를 분석하는 방법입니다. 하지만 최근에는 컴퓨터 성능의 발달로 인해 메모리의 여유 공간이 충분하다못해 넘치기 때문에 공간복잡도의 중요성이 예전에 비해서 많이 낮아졌습니다. 시간복잡도의 경우 알고리즘을 잘못 구성하였을 경우 결과값이 나오지 않거나 현저하게 느린속도가 나오기에 최근에는 공간복잡도보다는 시간복잡도를 우선시하여 프로그램을 작성합니다. [Algorithm] 알고리즘 시간복잡도에 대하여 공간복잡도 계산법 (빅-오) int a = 10; 일반적으로 공간이 하나씩 생성되는것을 1이라고 표현합니다. 위의 공간복잡도는 O(1)입니다. int get_..
시간복잡도란? 시간 복잡도란 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미합니다. 같은 결과를 가져오는 프로그래밍 소스도 어떻게 작성하느냐에 따라 걸리는 시간이 달라질 수 있습니다. 같은 결과를 나타내는 소스라면 최대한 시간이 적게 걸리는 좋은 소스입니다. 그렇기에 더 효율적인 알고리즘을 구성하기 위해서 시간 복잡도의 측면을 고려하고 중요하게 봅니다. 특히 최근 알고리즘 문제 해결에서 대부분 실행시간을 정해놓고 그 시간안에 소스가 돌아가야 정답으로 체크하기에 시간복잡도의 중요성이 더더욱 커졌다고 볼 수 있습니다. [Algorithm] 알고리즘 공간복잡도에 대하여 빅-오 표기법 시간 복잡도에는 여러 개념이 있지만 그중에서 ‘아무리 많이 걸려도 이 시간 안에는 끝날 것‘의 개념이 제일 중요합니다..
순열과 조합 실생활 예 순열과 조합의 차이는 순서를 정하느냐 그렇지 않느냐의 차이입니다. 순열 : 중국집 메뉴 5개 중 2개의 메뉴를 순서대로 먹는 경우의 수 조합 : 중국집 메뉴 5개 중 2개의 메뉴를 주문하는 경우의 수 순열이란? 순열이란 서로 다른 n개중 r개를 골라 순서를 고려해 나열한 경우의 수를 말합니다. 예를 들어 어느 중국집에 5개의 메뉴(a,b,c,d,e)가 있다고 해봅시다. 이때 5개의 메뉴(a,b,c,d,e)중 2개의 메뉴를 순서대로 먹는 경우의 수는 몇가지가 있을까요? 먼저 첫번째로 먹을 메뉴를 정하려면 이때 첫번째 메뉴가 될 수 있는 경우의 수는 5가지 입니다. 그리고 나서 첫번째 메뉴로 지정된 메뉴를 제외한 나머지 4가지의 메뉴로 두번째로 먹을 메뉴를 선택한다고 가정하면 이때의 ..
팩토리얼 ( ! ) 팩토리얼이란 서로 다른 n개를 나열하는 경우의 수를 의미합니다. 기호로는 n! 이렇게 쓰고 계산은 n부터 1씩 줄여나가면서 1이 될때까지의 모든 수를 곱합니다. 순열 ( nPr ) 순열이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 있음) 조합 ( nCr ) 조합이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 없음) 중복 순열 ( nπr ) 중복 순열이란 중복 가능한 n개중에서 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 있음) 중복 조합 ( nHr ) 중복 조합이란 중복 가능한 n개중에서 r개를 선택하는 경우의 수를 의미합니다. (순서 상관 없음) 같은 것이 있는 순열 순열이 같은 것이 포함된 원소들을 나열하는 ..
에라토스테네스의 체란? 고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법이며 이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 부릅니다. 특정 숫자의 배수는 소수가 아니라는 법칙에 착안하여 2 ~ N까지의 숫자에서 숫자들의 배수를 모두 제거한 뒤 제거되지 않은 숫자를 소수로 판별하는 방식이며 일종의 노가다 방식이라 상당히 무식한 방법이지만 이 방식이 프로그래밍에서는 상당히 효율적인 방법론이 됩니다. 에라토스테네스의 체는 반대로 2부터 배수들을 지워나가는 방식이기 때문에 숫자마다 일일이 약수가 있는지 검사할 필요가 전혀 없고, 이미 지워진 숫자는 바로 건너뛰면 되니 실행시간이 매우 짧습니다. 특정 범위에서의 모든 소수를 찾을때 가장 효율적인 알고리즘 에라토스테네스..