본문 바로가기

반응형

분류 전체보기

(174)
[Git] GitHub에 파일 옮기기 GitHub는 '원격 저장소'입니다. 즉, 내 컴퓨터에서 작업하던 작업물을 저장하는 공간입니다. 작업물을 저장한다는 것은 곧 레포지터리를 저장한다는 것과 같은 말입니다. 내 컴퓨터의 레포지터리는 'local repository'이고, 깃허브의 레포지터리는 'remote repository'입니다. 자, 그러면 내 컴퓨터의 레포지터리를 깃허브에 저장해봅시다. ​ 먼저, 깃허브 사이트에 들어가서 회원가입을 합니다. 회원가입이 끝나면 'Repositories'를 클릭하고 'New'를 클릭합니다. 다음으로 원하는 이름을 짓고 public을 클릭하신 다음에 'Create repository'를 클릭합니다. 저는 'Nothing'이라는 이름을 지어줬습니다. 참고로 Description에는 폴더에 대한 간단한 설명을..
[Git] 파일의 상태(status) Git으로 관리되는 파일은 일종의 '상태'라는 걸 가집니다. ​ 크게는 Untracked 상태와 Tracked 상태를 가지고, Tracked 상태는 다시 Staged 상태, Unmodified 상태, Modified 상태를 가집니다. ​ 각 상태를 순서대로 설명드리겠습니다. ​ [1] Untracked 상태 깃은 워킹 디렉터리에 파일을 추가하거나 수정했다고 해서 이를 자동으로 관리해주지 않습니다. 워킹 디렉터리에 새로 생성된 파일은 모두 'Untracked', 우리말로 '추적되지 않음' 상태입니다. 이 파일을 관리하려면 깃에 추적하라고 통지해 주어야 합니다. 통지해주는 방법이 바로 'git add'입니다. 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 untracked 상태입니다..
[Git] Git의 3가지 작업 영역 Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작합니다. 각 작업 영역의 이름은 아래와 같습니다. 1. working directory (작업 공간) 2. repository (저장소) 3. staging area (임시 저장 공간) 순서대로 하나씩 설명드리겠습니다. [1] Working Directory 워킹 디렉터리는 '작업을 하는 공간'을 의미합니다. 실제로 파일을 생성하고 수정하는 공간이죠. 그냥 폴더라고 생각해도 무방합니다. 프로젝트를 진행할때 코드를 저장해놓는 폴더가 워킹 디렉터리입니다. 워킹 디렉터리 안에 있는 '.git' 파일이 Repository입니다. ​ [2] Repository Repository는 Git에서 작업한 이력들을 저장하는 '저장소'입니다. 깃 저장소는 외형적..
[Git] 깃과 깃허브 프로그래밍을 공부하셨다면 '깃허브'라는 단어를 한 번쯤은 들어보셨을 겁니다. 하지만 '깃'은 조금 생소하실 수 있습니다. 많은 사람이 깃과 깃허브를 같은 것으로 알고 있습니다. 저 또한 그랬었죠. 하지만 깃과 깃허브는 다릅니다! 미리 말하자면 깃은 '도구'이고 깃허브는 '저장소'입니다. ​ 깃은 버전 관리 프로그램입니다. 버전 관리란 파일의 변화를 시간에 따라서 기록했다가 나중에 특정 시점의 버전을 꺼내올 수 있는 시스템을 말합니다. 버전은 여러분이 아시는 그 버전이 맞습니다. 전공서적을 보면 대부분 제목 앞에 '-th edition'이 붙습니다. 모든 책이 처음부터 완벽할 수는 없으니 조금씩 수정되는 것은 당연한 일입니다. 과제를 제출할 때도 마찬가지입니다. 학교 과제로 팀플을 해본 경험이 있다면 아래..
[C++] 투 포인터로 연속 부분합 구하기 어떤 수열의 연속 부분합을 구해보자!! 어떻게 해결할 것인가? 직관적으로 떠오르는 아이디어는 단순하게 이중 for문을 돌리는 것이다. 그러나 이 방법은 O(N^2)의 시간복잡도를 가지기 때문에 효율적이지 못하다. 투 포인터를 사용하면 시간 복잡도를 O(N)까지 단축시킬 수 있다. 위 문제의 핵심은 '연속'에 있다. 연속합을 구하는 것이기 때문에 중복되는 부분이 존재한다. 말로 하면 헷갈리니깐 그림으로 보자. 위 그림에서 빨간색과 파란색의 연속된 부분합에서 형광색 부분이 중복됨을 알 수 있다. 이 사실을 잘 기억하자. 이제 투 포인터의 알고리즘을 살펴보고, 손으로 예제 한 문제를 직접 풀어보자. [ 투 포인터 알고리즘 ] 1. 시작점(start), 끝점(end)을 -1로 초기화한다 2. 현재 부분합(sum..
[C++] 위상 정렬(Topology Sort) 위상 정렬은 비순환 단방향 그래프에서 순서가 정해져 있는 작업을 차례대로 수행해야 할 때 그 순서를 결정해주는 알고리즘이다. 순서만 맞으면 되기 때문에 정답이 두 개 이상일 수 있다. 단, 사이클이 발생하는 경우 위상 정렬을 수행할 수 없다. 이렇게 사이클이 발생하지 않는 그래프를 DAG(Directed Acyclic Graph)라고 한다. 즉, 위상정렬은 DAG에서만 정의될 수 있다. ​ 위상 정렬을 구현하기 위해서 '진입 차수'라는 개념을 알아야 한다. '진입 차수'란 노드로 들어오는 간선의 개수다. 말로 하면 헷갈리니깐 바로 그림으로 알아보자. 위 그림의 경우 진입 차수는 3이다. 노드0으로 들어오는 화살표의 개수가 3이기 때문이다. 위 그림의 경우 진입 차수는 0이다. 노드 0으로 들어오는 화살표..
[C++] 다익스트라(Dijkstra) 1. 다익스트라의 구성 최소 거리를 구할때 사용하는 대표적인 알고리즘 '다익스트라'에 대해 알아보자. 다익스트라 알고리즘은 시작점으로부터 모든 노드까지의 최소거리를 구해준다. 다익스트라를 구현하기 위해서는 비용 배열, 방문 노드 배열, 시작점~각 노드까지의 비용 배열이 필요하다. [ 다익스트라 구현시 필요 요소 ] 1. 비용 배열 weight(이중배열) 출발지에서 목적지로 갈 때 드는 비용을 나타내는 배열이다. weight[3][5] = 5 // 노드3 -> 노드5 갈 때 비용이 5만큼 든다는 뜻이다. weight[2][4] = INF // 노드2 -> 노드4 갈 때 비용이 무한만큼 든다는 뜻이다. 2. 방문 노드 배열 visit 방문한 노드를 확인하는 배열이다. visit[3] = true // 노드3..
[C++] 중위 표기식을 후위 표기식으로 변환 후 계산 중위 표기식은 연산자가 중간에 위치하는 표기식으로 우리가 늘 쓰는 표기식이다. 후위 표기식은 연산자가 뒤에 있는 표기식으로 컴퓨터의 연산 방식이다. 컴퓨터는 사람이 입력한 중위 표기식을 후위 표기식으로 변환해서 연산을 진행한다고 한다. 중위 표기식 : A * (B + C) 후위 표기식: ABC+* 이번 글에서는 중위 표기식을 후위 표기식으로 변환하는 알고리즘과 후위 표기식을 계산하는 알고리즘을 다룬다. 두 가지 경우 모두 stack 자료구조가 필요하다. 1. 중위 표기식을 후위 표기식으로 변환 알고리즘은 아래와 같다. 1) 피연산자는 무조건 출력 2) 연산자인 경우 ---- top보다 우선순위 크면 push ---- top보다 우선순위 작거나 같으면 pop 후 2) 반복 3) '('는 push 4) ')..

반응형