목록공부 (21)
기록
변경 이력의 통합 변경 이력 병합(Merge)하기 merge 내가 끌어온 저장소가 최신 버전이 아닌 경우, 즉 내가 pull을 실행한 후 다른 사람이 push를 하여 원격 저장소를 업데이트 해버린 경우에는 내 push 요청이 거부되어 버린다. 이런 경우 병합(merge)라는 작업을 진행하여 다른 사람의 업데이트 이력을 내 저장소에도 갱신해야한다. 만약 병합하지 않은 채로 이력을 덮어쓰게 되면 다른 삶이 push한 업데이트 내역이 사라져 버리기 때문이다. 충돌 해결하기 위에서 설명한 것처럼 merge 기능은 Git에서 변경한 부분을 자동으로 통합해 주는 기능이다. 그러나 경우에 따라 자동으로 병합할 수 없는 경우도 있다. 바로 원격 저장소와 로컬 저장소 양쪽에서 파일의 동일한 부분을 변경한 경우다. 이 경..
Tutorial2: 저장소 공유 Github에 원격 저장소 생성하기 우선 원격 저장소를 Github 상에 만든다. New repository 버튼을 누르고 repository 정보를 입력한다. 다 쓰면 Create repository 버튼을 누른다. 원격 저장소에 푸시(Push)하기 원격 저장소의 주소는 이름으로 기록해 둘 수 있다. 기록 해두면 push 할 때마다 긴 원격 저장소의 주소를 입력할 필요가 없다. 우선 origin 이라는 이름으로 원격 저장소를 등록하고 push 한다. $ git remote add 에 origin을, 에는 github 저장소의 HTTPS 주소를 넣어주면 된다. $ git remote add origin https://github.com/kyY00n/kyY00n.git - ..
저장소 공유 원격 저장소에 푸시(Push)하기 이전까지는 로컬 저장소의 기본적인 사용 방법을 기술했다. 이제부터는 원격 저장소를 이용하여 로컬 저장소의 변경 이력을 공유하는 방법에 대해 알아보자. push 내 PC의 로컬 저장소에서 변경된 이력을 원격 저장소에 공유하려면, 로컬 저장소의 변경 이력을 원격 저장소에 업로드해야 한다. 웹 상의 원격 저장소로 변경된 파일을 업로드하는 것을 Git에서는 푸시(Push)라고 한다. push를 실행하면, 원격 저장소에 내 변경 이력이 업로드돼서 원격 저장소와 로컬 저장소가 동일한 상태가 된다. 원격 저장소 복제(Clone)하기 누군가의 변경 이력이 적용된 원격 저장소가 있으면, 그걸 웹에서 통째로 복제해서 내 PC에서 직접 작업할 수 있다. clone 원격 저장소를..
Tutorial 1 새 저장소 만들기 kyY00n이라는 폴더에 새로운 저장소를 만들 것이다. (깃은 이미 설치 되어있어야한다.) 콘솔창을 해당 폴더 위치에서 열어준 후 다음 명령을 입력한다. $ git init 파일 커밋(Commit)하기 kyY00n 폴더에 새로운 파일을 추가하고, 원격 저장소에 파일을 등록할 것이다. kyY00n폴더 안에 'git-tutorial.txt'라는 파일을 생성했다고 가정하자. 작업트리와 인덱스 상태 확인(Status) $ git status 아직은 'git-tutorial.txt'가 생성된 이력을 인덱스에 추가하지 않았으므로 $ git status # On branch master # # Initial commit # # Untracked files: # (use "git ..
Git의 기본 Git: 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템' Git에서는 소스 코드가 변경된 이력을 쉽게 확인, 특정 시점에 저장된 버전과 비교하거나 특정 시점으로 되돌아갈 수도 있다. 또 내가 올리려는 파일이 누군가 편집한 내용과 충돌하는데 서버에 업로드 하려 한다면 경고메시지가 발생한다. 덮어씌우기 실수를 방지해주는 것. 이력을 관리하는 저장소(Repository) 저장소(repository)란 말 그대로 파일이나 폴더를 저장해 두는 곳이다. 그런데 Git 저장소가 제공하는 좋은 점 중 하나는 파일이 변경 이력 별로 구분되어 저장된다는 점이다. 비슷한 파일이라도 실제 내용 일부 문구가 서로 다르면 다른 파일로 인식하기 때문에 파일을 변경 사항 별로 구분해 저장할 수 ..
OOP 클래스 구조 설계 후 재사용성 증가, 코드 반복이 최소, 메서드 활용 가능 class Student(object): def __init__(self, name, number, grade, details): self._name = name self._number = number self._grade = grade self._details = details def __str__(self): return 'str : {}'.format(self._name) def __repr__(self): return 'repr : {}'.format(self._name) student1 = Student('kim', 1, 1, {'gender':'male', 'score1': 95, 'score2': 88}) st..
동적 계획법 (Dynamic Programming) 하나의 문제는 단 한 번만 풀도록 하는 알고리즘이다. 한 번 푼 것을 여러 번 다시 푸는 비효율적인 알고리즘을 개선시키는 방법이기도 하다. 상당수 분할 정복 기법은 동일한 문제를 다시 푼다는 단점을 가지고 있다. (다만 분할 정복 기법을 '정렬'과 같은 몇몇 요소에 대해서는 동일한 문제를 다시 풀게 되는 단점이 없다.) 대표적인 예시로는 피보나치 수열이 있다. 피보나치 수열은 특정한 숫자를 구하기 위해 그 앞에 있는 숫자와 두 칸 앞에 있는 숫자의 합을 구해야 한다. 만약 재귀함수만으로 프로그래밍을 한다면, 15번째 피보나치 수열의 값을 구하기 위해서는12번째 피보나치 수열값을 3번이나 계산하게 된다. 우리는 이런 불필요한 계산을 DP를 이용하여 없앨 ..
정렬 알고리즘 1. 선택 정렬 (Selection Sort) 1 10 5 8 7 6 4 3 2 9 이걸 오름차순으로 정렬할 때, 가장 작은 걸 골라(select) 맨 앞으로 가져오는 알고리즘이다. Source Code #include int main(void){ int i, j, min, index, temp; int array[10] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9}; for(i = 0; i array[j]){ //min값을 i번째 부터 마지막 원소까지 검사한다. min = array[j]; index = j; } temp = array[i]; //원래..