본문 바로가기

분류 전체보기

(594)
[DFS] flood fill ( p.78 ) 이와 같이 그래프로 만든 다음 배열의 (0, 0)부터 순차탐색을 진행하면서 (a, b)의 값이 만약 1이라면 이 점을 시작으로 하여 깊이우선탐색을 이용하여 모든 연결된 점을 방문하고 특정 값으로 체크한다. 나머지 점들도 모두 순차탐색하면서 마지막 까지 깊이우선탐색을 실행하고 알고리즘을 종료한다. 마지막에 깊이우선탐색을 실행한 횟수가 두더지의 수가 되고, 각 두더지 굴의 크기는 다른 배열에 저장해 둔 다음 마지막에 std::sort()를 이용하여 정렬한 후 내림차순으로 출력하면 된다. 여기에 사용되는 알고리즘은 지뢰찾기, 뿌요뿌요 등의 게임에 많이 활용되는 방법으로서, flood fill이라고도 한다. 자주 등장하는 방법이므로 익혀두면 활용가치가 크다. 이 알고리즘에서는 재귀함수를 이용하여 깊이우선탐색을 ..
git stash git의 요술 책갈피, Stash 기능 소개 git에는 기본적인 커밋 & 푸시 등의 기능 외에도 수많은 기능들이 있습니다. 그중 매우 유용한 요술 책갈피인 Stash에 대한 소개입니다. 사전적 의미 Stash [stӕʃ] 1. (안전한 곳에) 넣어 두다 2. 챙겨 � wit.nts-corp.com
apt-get 명령어/ package 설치, 삭제, 검색 apt-get 명령어 정리 (패키지 설치,제거) https://blog.outsider.ne.kr/346 Ubuntu의 apt-get 명령어 정리 apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구입니다. 우분투에.. luckeex.tistory.com
git merge 후 pull 실패 시 해결 방안 - Pull is not possible because you have unmerged files
git merge 후 pull 실패 시 해결 방안 - You have not concluded your merge (MERGE_HEAD exists) 원격지 저장소에 내용과 저의 코드가 겹치는 부분 없이 깔끔하게 병합(merge)이 될 수도 있고, 같은 부분을 고쳤다던지 한다면, 충돌(conflict)이 발생할 수 있다.
[DFS, BFS] 리모컨 백트래킹은 모든 호출이 끝이 나야만 해답을 찾을 수 있기 때문에, 이러한 깊이우선 탐색은 이 문제에서 비효율적이다. 이 방법 대신 너비우선탐색 기법을 이용하여 버튼 누름 횟수를 기준으로 가장 먼저 목표 온도에 도달할 때까지 탐색하고 중단하는 방법으로 설계해 보자. 34도에 도달하게 되면 모든 연산을 중지하고 결과를 얻을 수 있다. 너비우선탐색으로 탐색하여 목표 온도에 도달하는 경우 계산량은 이 탐색 버튼의 수 3과 목표 온도에 도달하는 최적의 횟수 cnt에 비례하므로 계산량을 줄일 수 있다. 순서대로 하면 cnt가 적은 순서대로 차례로 계산이 된다. 목표 온도에 도달하면 가장 적은 cnt로 도달한 것임을 알 수 있다.
vi 편집기 라인 이동
cmake option cmake 예약 변수 cmake에는 자동으로 지정된 변수들이 많은데 이들을 잘 알아야 원하는 빌드 설정을 하고 CMakeLists.txt도 쉽게 작성할 수 있다. 대부분 CMAKE_로 시작하며 CMakeCache.txt를 보면 어떤 변수들이 있는지 볼 수 있다. 그 중 중요한 몇 개만 여기에 설명하는데 아래 내용을 보다가 이 변수들이 나오면 의미를 찾아보자. CMAKE_CURRENT_SOURCE_DIR: 소스 파일들을 찾을 디렉토리 경로로 CMakeLists.txt가 있는 경로가 기본 값으로 들어있다. 다른 경로를 설정할 때 이 변수를 기준으로 상대 경로를 만들면 편하다. CMAKE_INSTALL_PREFIX: make install 할때 빌드 결과물이 복사될 경로로 /usr/local이 기본 값이다. ..
make install INSTALL() 설치 경로 설정 보통 라이브러리를 설치할 때 github에서 라이브러리 소스를 다운로드 받아 make를 하여 라이브러리 파일이 만들어 진 후 make install을 실행하여 라이브러리를 시스템에 설치한다. 설치란 별게 아니고 라이브러리를 다른 곳에서도 쓸 수 있도록 소스 파일(*.cpp)을 제외한 바이너리와 헤더 파일들을 다른 곳으로 복사하는 것을 말한다. 설치할 경로는 위에서 CMAKE_INSTALL_PREFIX 변수로 지정했다. 이 변수를 지정하지 않으면 기본적으로 /usr/local에 설치된다. INSTALL()은 복사할 파일의 종류에 따라 설치 경로에 대한 상대 경로를 지정한다.
CMake Build System / gcc, make, cmake 차이점 리눅스에서는 보통 편집기와 컴파일러가 분리되어있다. 리눅스에서의 통합개발환경이란 VS처럼 자체적인 컴파일러까지 포함하는게 아니고 리눅스에 기본 설치된 컴파일러인 gcc를 잘 가져다 쓰는 코드 편집기를 말한다. IDE 마다 각자의 방식으로 소스코드 목록과 의존성을 관리하는 프로젝트 파일을 만드는데 소프트웨어를 배포할 때 특정 IDE의 프로젝트 파일을 배포하게 되면 그 소프트웨어를 받아서 쓰는 사람도 특정 IDE를 설치해야 하는 번거로움이 있다. 그래서 리눅스에서 공통적으로 사용하는 빌드 시스템이 있는데 바로 make와 cmake다. 그래서 소프트웨어을 개발할 때는 편리한 IDE를 쓰고 배포하거나 남의 소프트웨어를 가져다 쓸 때는 command line에서 리눅스 빌드툴을 써서 직접 빌드를 한다. gcc, ..
cmake 과정 설치가 되었으면 CMakeLists.txt파일을 만듭니다. (참고로 파일명을 주의해야합니다. 특히 대소문자 구분해서 CMakeLists.txt파일입니다.) 위의 소스의 리스트를 빌드하겠습니다.([C++] Make와 Makefile 작성법에서 사용하던 소스들...) Makefile로 작성할 때는 여러 의존성 관계까지 작성을 했는데 cmake의 빌드 파일인 CMakeLists.txt은 엄청 심플하네요. 이걸로 Makefile 파일을 작성하겠습니다. cmake를 실행하면 3개의 파일과 1개의 디렉토리가 생긴 것을 확인할 수 있습니다. 그럼 저 Makefile를 make하기 전에 Makefile의 내용을 살펴보겠습니다. 무언가 엄청난 빌드 파일입니다... 자세히 분석해 보면 이해를 하겠는데... 굳이 이해할 필..
vi 편집기 검색, 하이라이트 설정
vi 편집기 라인 복사 (명령모드에서) 한 줄 복사: yy 한 줄 삭제: dd 붙여넣기 : -p N줄 복사나 삭제는 nyy ndd ex) 3줄 복사 -> 3yy [리눅스 Linux] vi 편집기 블락 범위 복사, 주석 블럭 처리, 범위 삭제, 비주얼 블럭 모드, 복붙 norm [ 리눅스 Linux, 유닉스 Unix 포스팅 링크 모음 ] 안녕하세요~!! 저번 시간 vi 편집기의 아주 기초 사용법에 이어서 오늘 vi편집기에서 자주 사용하게 될 블락 복사 기능에 대해서 간단하고 빠르게~ 다 jhnyang.tistory.com
vi 편집기 라인 출력 [리눅스 유닉스] vi편집기 라인 출력하기, 행번호 출력, 검색 결과 하이라이터 색깔칠하기 (hlsearch 안녕하세요!! 아주아주 간단하게 다뤄볼 정말 초스피드로 끝날 거 같은 정보성 포스팅입니다. vi 편집기에서 행번호, 라인번호 출력하기 라인번호 출력해주는 명령어예요. 라인번호출력 :set num jhnyang.tistory.com
[putty] colour 변경 # putty 배경을 흰색으로 설정 방법 # # putty 배경을 흰색으로 설정 방법 # windows -> colours -> Use system colours www.pigletstory.co.kr PuTTY 설치와 폰트, 배경, 기본 설정하기 PuTTY는 리눅스의 터미널 창으로 접근할 수 있게 해주는 도구다. 설치 작업이 필요 없는 실행 파일이라 어디서든 부담없이 사용할 수 있다. 다운 받는 사이트 https://www.chiark.greenend.org.uk/~sgtatham/pu pimi.tistory.com
count inversion using merge sort Count Inversions in an array | Set 1 (Using Merge Sort) - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions. www.geeksforgeeks.org people.cs.umass.edu/~sheldon/teaching/mhc/cs312/2013sp/Slides/Slides13%20-%20Counting%20Inve..
int형 최대, 최소 설정 int형의 최댓값은 0x7fffffff(2,147,483,647)이며, 최솟값은 0x80000000(-2,147,483,648)이다. 엄밀하게 최대, 최소를 지정할 때 이 값을 이용하면 되며, 16진법을 이용하면 쉽게 처리할 수 있다. 여기서 주의할 점은 위 값들을 설정한 후 값을 증가시키거나 감소시키면 오버플로 (overflow)로 인하여 답이 잘못될 수 있다. 예를 들어 다음 명령을 보자. 위 예의 경우에 max값이 최댓값이었는데, 여기서 1을 증가하면 오버플로가 발생하여 max값은 음수가 된다. 따라서 이런 점을 방지하기 위하여 적어도 2배 정도라 하더라도 오버플로가 발생하지 않도록 처리하는 경우가 많다. 이럴 때는 주로 최댓값을 987654321 등의 자릿수도 쉽게 알 수 있고 2배를 하더라도 정..
[DFS] n-Queen 같은 대각선 대각선은 기울기가 증가하는 대각선 부분과 기울기가 감소하는 부분의 2가지 대각선이 존재한다. 이 2가지 대각선에 대해서도 체크배열을 만들어서 활용할 수 있다. 기울기가 증가하는 대각선부터 살펴보면 다음과 같다. 위 대각선 상에 있는 칸의 특징을 보면 행+열의 값이 일정하다. n이 4일 경우 행+열의 최소값은 2이고 최댓값은 8이다. 따라서 기울기가 증가하는 대각선은 체크배열의 행+열 위치에 체크하여 기울기가 증가하는 대각선 상에 퀸을 놓을 수 있는지 없는지를 쉽게 확인할 수 있다. 기울기가 감소하는 대각선도 아래와 같은 특징이 있다. 기울기가 감소하는 대각선 부분은 행과 열의 차가 일정하다. 범위는 n이 4일 경우 –3에서 3까지의 값을 지닌다. 음의 값을 양의 값으로 보정하기 위해 n을 더..
update-alternatives 명령어 alternatives (cf, update-alternatives)는 심볼릭 링크를 생성, 제거, 관리, 조회할 수 있는 기능을 제공하는 GNU 라이센스의 커맨드라인 툴. 즉, 심볼릭 링크를 통해서 특정 커맨드에 대해 디폴트 버전 혹은 경로를 정의할 수 있다. 다만, Debian 계열의 리눅스에는 update-alternatives 명령어만 제공 (perl 언어에 대한 의존성을 제거하기 위해 기존의 alternatives 스크립트가 재구현이 되었다고 함)되고, Redhat 계열의 리눅스 명령과 제공하는 기능에는 다소 차이가 있지만, 이번에는 공통적인 기능과 옵션에 대해서만 정리하기로 하였다. 추가로, 예제들은 Redhat 기준으로 정리하였다. 심볼릭 링크 생성하기 (–install) --install ..
PATH 설정 $PATH 설정 영구 등록 앞서 알아본 환경 변수 등록 방법은 어디까지나 임시로만 적용되는 것이며 해당 터미널이나 쉘 등이 종료되면 해당 내용은 초기화됩니다. 해당 환경 변수 내용을 영구적으로 등록하여 언제나 사용하고 싶다면 사용자자별 환경 설정 파일이나 시스템 환경설정 파일에 추가해주어야 합니다. export PATH=/추가할 경로1:/추가할 경로2:/경로3:$PATH gedit 같은 문서 편집 프로그램을 열어 환경 설정 파일 말미에 위 구문을 작성하고 저장해주시면됩니다. 그러나 이것은 터미널 작업에 익숙지 않은 분들에게 권장드리는 방법이고 터미널 작업에 익숙한 터미널에서 바로 내용을 추가하고 적용할 수 있습니다. 환경 설정 파일 백업 study@study-VirtualBox:~$ cp ~/.bashr..
apt-get Linux에서는 설치 가능한 소프트웨어가 온라인상의 저장소(Repository)에 저장되어 있고, 필요할 때마다 패키지를 다운로드 받아 사용하는 방식으로 새로운 소프트웨어를 설치합니다. 여기에 사용되는 명령어가 바로 apt-get 입니다. 새로운 소프트웨어의 설치는 관리자 권한이 필요하기 때문에 이 명령어를 사용할 때는 주로 앞에 sudo를 붙여서 sudo apt-get으로 사용합니다. 저장소(Repository)는 한곳에만 저장되어 있는것이 아니라 전 세계 곳곳에 같은 자료를 복사해서 운영하는 미러(Mirror) 서버가 존재합니다. 만약 하나의 저장소만 운영한다면 물리적 거리상의 문제로 다운로드 속도가 매우 느리고, 서버가 부하를 견뎌내기 어려울 것입니다. 이 저장소의 위치는 Ubuntu를 설치할 당시..
[Linux] cpu 정보 확인 0. CPU 정보 확인 > cat /proc/cpuinfo 1. CPU 코어 전체 개수 확인 > grep -c processor /proc/cpuinfo 2. 물리 CPU 수 확인 > grep "physical id" /proc/cpuinfo | sort -u | wc -l 3. CPU당 물리 코어 수 확인 > grep "cpu cores" /proc/cpuinfo | tail -1 [리눅스] 리눅스에서 CPU 정보 확인하기 리눅스에서 CPU 정보 및 CPU 코어개수, 물리 CPU 수를 쉽게 확인하는 방법이다. 결론적으로 /proc/cpuinfo 에 모든 정보가 나와있지만, 개수를 확인하고 싶은데 일일이 찾아보기 귀찮을 땐 1~3번 참고. 0. nota.tistory.com [Linux] uname 명령..
git 일반적 명령어 정리 github.com/jeonghwan-kim/git-usage
[Linux] directory 구성 / 리눅스 소스레벨 구조 외부 업체에서 제공하는 프로그램을 설치할 경우, /opt에, 컴파일 해서 설치하는 경우나 사용자가 압축을 풀어 설치하는 경우는 /usr/local을 기본 디렉토리로 설치되며, 패키지로 설치하는 경우, /usr을 기본 디렉토리로 설치됩니다. 그리고, 디렉토리 구성은 /usr[/local]/bin : 실행파일 /usr[/local]/share: 공유파일로 그림이나 문서, 아이콘등 /usr/[local]/lib: 각종 라이브러리 /etc: 각종 설정파일 /var: 각종 상태나, 캐시등 $HOME/.패키지명: 사용자별 설정 및 저장된 파일 및 작업디렉토리 kernel 디렉터리 : 태스크 관리자가 구현된 디렉터리이다. - 테스크의 생성과 소멸, 프로그램의 실행, 스케줄링, 시그널 처리등의 기능 구현. arch 디..
apt-get install 로 설치된 위치찾기 Windows 에서는 대부분 Program files 디렉토리에 설치가 되는 편인데 Ubuntu 는 좀 이곳저곳에 설치되는 느낌이 강합니다. 어떤 방법으로 설치하느냐에 따라서도 좀 달라지고 게다가 어떤 계정으로 설치하느냐에 따라 달라지는 것 같기도 하고요. 패키지가 설치 된 디렉토리 찾는법을 알아보겠습니다. apt-get install 로 설치된 경우 dpkg -L apt-get install 로 설치한 패키지는 검색이 됩니다. dpkg -L openjdk-8-jre gem 으로 설치된 경우 gem environment gem environment | grep ruby
pip & pip3 설치(install) 방법 pip이란 python으로 작성된 패키지의 설치 및 관리를 해주는 프로그램이다. pip을 이용하면 의존성 문제를 자동적으로 해결해주기 때문에 편리하다. 만약 pip이 설치되어 있다면 pip list 명령을 통해 현재 설치되어 있는 패키지들의 리스트를 확인할 수 있다. pip은 Python 2.x용, pip3는 Python 3.x용 프로그램이다. apt-get install python-pip apt-get install python3-pip 우분투(Ubuntu)에서 pip & pip3 설치(install) 방법 – Wanho Choi pip이란 python으로 작성된 패키지의 설치 및 관리를 해주는 프로그램이다. pip을 이용하면 의존성 문제를 자동적으로 해결해주기 때문에 편리하다. 만약 pip이 설치되..
sudo 사용 문제점 응? sudo 쓰지 말라고? sudo를 통해 문제를 해결했지만, 올바른 해결책인가 싶은 느낌이 들기 시작했습니다. 그래서 디버깅을 시작해보았습니다. 가장 먼저, PermissionError가 왜 발생하는지 살펴보는 것으로 시작했습니다. 문제: admin은 /usr/local/…에 파일을 쓸 권리가 없다. pip3 install의 default 설치 경로는 다음과 같습니다. /usr/local/bin/python3.6 문제는, 해당 경로에 파일을 쓰거나(write) 변경할(edit) 권리(privilege)가 저에게는 없다는 점입니다. 이 때의 저는 administrator(이하 admin으로 쓰겠습니다)입니다. admin이 무엇이고, 왜 일반 admin에게는 읽고 변경할 권리가 없는 지에 대해서는 잠시 ..
Library 경로 설정 우분투에서 개발하면서 가장 적응이 안되었던것이 Library 가져다 쓰는것이었다.(*.so, *.a) 매번 검색하는게 귀찮아서 블로그에 기록해둔다. 보통 아래와 같이 3가지 방법이 주요하다. 1. Home 디렉토리의 .profile 또는 /etc/.profile 에 라이브러리를 추가 * .profile은 숨김파일로 ls -al 옵션을 함께 줘야 보여진다. 2. 쉘에서 Path 지정. - LD_LIBRARY_PATH=/home/user/lib:$LD_LIBRARY_PATH - export LD_LIBRARY_PATH 3. /etc/enviroment에 입력하거나, bash가 시작될때 불러올 수 있도록 home 디렉토리의 .bashrc에 입력 끝으로 우분투에서 필요한 공유 라이브러리들은 ldconfig를 사..
동적 링크 라이브러리, ldconfig 2. 다운받은 폴더로 이동해 압축을 풀고 폴더로 들어간다. tar -xf protobuf-2.6.0.tar.gz cd protobuf-2.6.0 3. 아래 명령을 통해 빌드한다. sudo ./configure sudo make sudo make check sudo make install 4. 설치가 되었는지 확인한다. protoc --version 5. 만약 위에서 오류가 발생하면 아래와 같이 해본다. sudo ldconfig ldconfig란? ldconfig 는 동적 링크 라이브러리(.so)로 소스컴파일 한 실행 파일을 ldd[파일이름] 해보면 링크가 안되어 있을 시 경로를 못찾는 것들이 나오는데 이를 해결할 떄 사용한다. 이때 동적링크를 /etc/ld.so.conf 에 해당 라이브러리 경로를 삽입 ..
protobuf 설치 빌드 중 'make: protoc: Command not found' 메세지와 함께 빌드가 안되는 문제가 생겼다. protoc는 Google 에서 개발한 언어, 플랫폼에서 자유로운 메세지 전송 방법인 Protocol Buffer 이다. 설치 방법 1. https://developers.google.com/protocol-buffers/ 에서 코드를 다운 받는다. (protobuf-2.6.0.tar.gz) 2. 다운받은 폴더로 이동해 압축을 풀고 폴더로 들어간다. tar -xf protobuf-2.6.0.tar.gz cd protobuf-2.6.0 3. 아래 명령을 통해 빌드한다. sudo ./configure sudo make sudo make check sudo make install 4. 설치가 되었..