Programming
-
[알고리즘] 이분 탐색(Binary Search)Programming/Algorithms 2021. 10. 1. 16:49
이분 탐색이란 주어진 데이터 중에서 원하는 데이터를 찾는 탐색 기법 중 하나로, 전체 범위를 두 부분으로 나누는 과정을 반복하여 목표값을 찾아내는 기법이다. 간단하게 예를 들면, 레크레이션 등에서 많이 하는 업다운(Up, Down) 게임을 생각하면 된다. 1~100 숫자 중 사회자가 생각한 숫자를 맞출 때 중간값인 50을 처음 부르고 이후 사회자의 Up, Down 대답에 따라 75, 25 등 나머지 범위의 중간값을 계속 부르는 방식으로 진행된다. 진행 순서 초기 설정 (left = 최소 index 값, right = 최대 index 값) mid 값 설정 (left : 최소 index 값, right : 최대 index 값, mid = (left+right)/2 ) 이분 탐색을 적용하기 위해서는 데이터가 ..
-
[BOJ] 백준 11726번 - 2×n 타일링Programming/Algorithms 2021. 6. 22. 15:28
https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 대표적인 DP 문제이다. 우선 문제를 보는 순간 점화식으로 표현될 것 같다는 생각이 든다. 2*n 크기의 직사각형을 1*2, 2*1 두 종류의 타일로 채울 때, 모든 경우는 2가지로 나눌 수 있다. 가장 왼쪽 타일이 2*1 타일로 시작하는 경우 가장 왼쪽 타일이 1*2 타일로 시작하는 경우 -> 1*2 타일은 위아래로 붙어서 2*2 형태로만 존재할 수 있다. 타일의 종류는 2종류만 존재하므로 가장 왼쪽 타일은 2*1타..
-
[C++] EOF 입력받기Programming/C++ 2021. 6. 22. 10:22
C 에서는 eof 입력을 보통 다음과 같이 처리했었다. while (scanf("%d %d", &a, &b) != EOF){ /* code here */ } C++ 에서는 cin 객체와 >> operator 로 입력을 받을 때는 eof 의 입력을 다른 방식으로 처리해 주어야 한다. while (std::cin >> a >> b) { /* code here */ } 위와 같이 입력 받으면 eof 를 입력받을 시 반복문이 종료된다. cin 은 실제 입력을 수행하는 클래스인 istream 클래스 객체이고, >> operator 는 istream 클래스에 정의되어 있는 연산자이다. >> operator 는 istream 객체의 값을 추출하여 변수로 넘겨주는 역할을 하고 호출한 자신을 반환한다. 1 2 를 입력하..
-
[sftp] vscode 에서 서버 연결하기Programming/기타 2021. 3. 1. 12:05
vscode 의 "sftp" 확장 프로그램을 쓰면 서버의 소스를 로컬에서 vscode로 편집할 수 있습니다. 저는 가상머신의 리눅스 환경에서 프로젝트를 진행하다가 vim 보다는 아무래도 vscode 가 익숙하여 로컬 vscode 에서 서버를 연결하여 사용하였고 그 방법을 공유하려고 합니다. *서버에 ssh 가 설치되어 있지 않아서 sftp 이용이 불가할 수 있으니 sudo dpkg -l | grep ssh 로 확인해보시고 없다면 sudo apt-get install ssh 로 ssh 를 먼저 설치해주셔야 합니다.* 1. SFTP 확장 프로그램 설치 vscode 에서 sftp 를 사용하기 위해 확장 프로그램을 설치하여야 합니다. - vscode 에서 왼쪽 메뉴의 저 테트리스 같은 모양을 누르면 확장 프로그..
-
[Vim]vim 기본설정 및 팁Programming/기타 2020. 12. 10. 20:58
VIM(VI iMproved) : 리눅스 터미널 환경에서 사용가능한 대표적인 텍스트 편집기 vim 의 설정값은 .vimrc 파일을 수정함으로 변경할 수 있고, .vimrc 파일은 언제나 홈 디렉토리에 존재해야 한다. 1. .vimrc 파일 생성하기 cd ~ vim .vimrc 2. .vimrc 파일 설정하기 필자가 사용하는 개인 설정값을 아래 첨부합니다. 복사해가실 분은 아래 코드블럭을 사용해주시면 됩니다. if has("syntax") syntax on endif set autoindent set cindent set ts=4 set sts=4 set shiftwidth=4 set laststatus=2 set hlsearch set scrolloff=2 set showmatch set nocompat..
-
[알고리즘] 동적 계획법(Dynamic Programming) - 기본Programming/Algorithms 2020. 12. 9. 21:24
동적 계획법(Dynamic Programming) 짧게 줄여서 DP 라고 부르는 이 알고리즘은 분할정복(Divide and Conquer) 알고리즘과 마찬가지로 복잡한 문제를 여러 개의 부분 문제들(Sub-problem) 으로 나누어 푼 후, 그 결과를 이용하여 복잡한 문제를 푸는 알고리즘이다. 다만 분할정복 알고리즘과의 차이는 DP 에서는 각 부분 문제들간에 겹치는 부분이 존재한다는 것인데, DP 는 이러한 겹치는 부분들을 메모이제이션(Memoization) 이라는 기법을 사용하여 단 한 번만 계산하도록 함으로써 알고리즘의 작동 시간을 줄이는 게 핵심입니다. 그렇다면 메모이제이션이라는 것은 무엇인지 알아봅시다. 피보나치 수열을 예로 들면, 아래와 같이 Fib(0) ~ Fib(3) 은 동일한 값을 구하는..
-
[웹서버] 라즈베리파이로 홈 서버 만들기Programming/Server 2020. 10. 30. 11:04
안녕하세요 점점 날씨가 차가워지고 있네요. 오늘은 제가 집 어딘가 구석에 숨겨두었다가 어느날 이걸로 뭐 할 수 있는게 없을까? 해서 라즈베리 파이로 웹 서버를 만들게 된 이야기를 포스팅 해보려고 합니다. 마침 요즘 사이드 프로젝트로 책을 읽고 독후감을 쓸 수 있는 웹 사이트를 하나 만들고 있었는데 이 웹을 aws 같은 호스팅 서비스를 이용하지 않고 라즈베리파이를 이용해서 집에 직접 서버를 운영하기로 했습니다. 1. 웹 서버 설치하기 라즈베리 파이를 서버로 이용하기 위하여는 라즈베리 파이가 서버로서 동작할 수 있도록 웹 서버 소프트웨어를 설치해주어야 합니다. 일반적으로 많이 쓰이는 웹 서버 소프트웨어는 아파치(Apache), 엔진엑스(Nginx) 등이 있는데 라즈베리 파이라는 제한된 환경을 고려하여 아파치..