본문 바로가기

반응형

분류 전체보기

(75)
백준 js 1406: 에디터 문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 입력되어 있으면, 커서가 위치할 수 있는 곳은 L+1가지 경우가 있다. 이 편집기가 지원하는 명령어는 다음과 같다. L 커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨) D 커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨) B 커서 왼쪽에 있는 문자를 삭제함 (커서가 문장의 맨 앞이면 무..
백준 js 1874: 스택 수열 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 입력 첫 줄에 n (1 ≤ n ≤ 100,000)이 주어..
Git 1: 오픈소스 소프트웨어란? 보호되어 있는 글입니다.
git: stashing과 cleaning stashing 하나의 브랜치에서 작업하던 내용을 commit하지 않고 임시저장해두어야 할 때사용한다 이렇게 하면 해당 브랜치의 working directory를 clean한 상태로 정리할 수 있다. $ git stashing push # 작업 중인 내용을 임시 저장 $ git stashing list # 임시 저장 중인 내용 보기 $ git stashing apply # 임시 저장했던 내용을 다시 복원한다. $ git stashing apply --index # 임시 저장했던 내용을 staged 상태까지 복원 $ git stashing drop # 해당 stashing 삭제 $ git stashing pop # 임시 저장했던 내용을 복원하고 stash 삭제 cleaning working director..
git: 로그 상대 참조 (^, ~) 로그를 일일히 찾아 입력하는 불편함을 줄여주기 위해 상대 참조 연산자를 통해 접근한다. ~ (틸드)와 ^(캐럿)을 통해 접근할 수 있다. HEAD(현재 가리키고 있는 로그 위치)로 할수도 있고, 특정 브랜치로 할 수도 있다. ~와 ^의 차이 둘 다 부모로 접근한다는 개념은 같으나 사용하는 곳이 다르다 예를들어 HEAD^와 HEAD~는 둘다 현재 HEAD가 가리키고 있는 로그에서 앞단계(부모)를 이동하는 것이다. 그러나 사용하는 방법에 따라 둘의 차이가 있는데, HEAD^2: 어떤 브랜치를 선택할래? tree-way merge한 브랜치에서 그 전 브랜치로 이동할 때 사용된다. 첫번째 부모는 main이고, 두번째부모는 main에 Merge된 다른 branch이다. 그래서 결국 HEAD^는 main브랜치 co..
git: tracking branch & upstream branch tracking branch & upstream branch tracking branch는 remote branch를 추적하는 local branch이다. (local branch와 remote branch의 history는 서로 독립적이다) 예를 들어 $ git fetch origin fetch 명령어를 사용해서 remote branch들을 최신 상태로 update를 한다면, remote branch들은 / 형태로 Local에 업데이트 되는데, 이런 형태의 branch들은 직접 수정할 수 없다. 이 remote branch들을 local에서 사용, 수정할 수 있도록 해주는 것이 tracking branch이다. tracking branch는 Local에서 원격 브랜치를 tracking할 수 있는 bra..
git: gitignore 파일 규칙 *.[oa] # .o와 .a로 끝나는 모든 파일 *~ # ~로 끝나느 모든 파일 !lib.o # 모든 .o 파일은 무시한다고 했지만 !를 사용하는 lib.o 파일은 무시하지 않음 /TODO # 현재 디렉토리에 있는 TODO 파일만 무시 build/ # build dir에 있는 모든 파일 무시 # build 아래 하위 디렉토리도 포함 doc/**/*.pdf # doc아래 하위 dir 포함해서 .pdf 확장자 모두 무시
git: rebase 심화 (rebase --onto: branch 부모의 부모에 대한 rebase) branch가 한 줄기만 있다면 # feature branch에서 $ git rebase 위 명령어만 적으면 rebase할 수 있다. 그렇다면 해당 브랜치의 부모브랜치의 부모브랜치, 즉 1번의 브랜치를 거쳐 rebase는 어떻게 할까? 위 그림과 같은 상황에서 client를 main 브랜치로 rebase를 해야한다고 하면, 아래 그림과 같이 client만 main 브랜치 커밋들 옆에 붙어야 한다. 이렇게 하기위해선 $ git rebase --onto main server # rebase --onto 위 명령어를 통해서 rebase할 수 있다. 그 후 main branch와 client branch를 fast-forward로 merge하면 된다. 마지막 server도 main branch로 rebase하고..