SW
-
[라즈베리파이] GPIO 제어 3가지 방법SW/Embedded 2018. 1. 12. 17:37
GPIO 입력, 출력 동시에 불가능 하다.(2가지 모드중 한가지를 선택) 핀은 한가지 이상의 기능을 하기도 한다.(데이터 시트 참조) 참고자료 제어 직접 레지스터에 접근 하여 사용하는 방법이 있다. 리눅스에서 제공하는 sysfs를 사용하는 방법이 있다. 라이브러리를 활용해서 제어할수 있다. 레지스터를 다루기 위해 먼저 출력/입력 모드를 설정한다. 1. 직접 레지스터에 접근하여 데이터 시트 가상주소 - 물리주소 - 버스주소가 있다. 리눅스의 응용 프로그램은 가상주소 접근만 가능하다. /dev/mem파일 을 사용하여 물리주소를 사용한다.(루트권한) 0핀~9 = 레지스터 0 , 10~19 = 레지스터 1 … 레지스터 6까지 있다.(데이터시트 참조) 선언 define MMAP_SIZE 4096 define GP..
-
[알고리즘] BacktrackingSW/Algorithm 2018. 1. 6. 21:00
Backtracking 미로찾기 막다른 골목이면 이제까지 온 길을 돌아오게 된다. (백트레킹 -> 스택 & 재귀?) right hand / left hand -> 오른손(왼손)으로 벽을 짚고 간다.(출구가 중간에 있으면 안될 경우도 생김) N-Queen NxN 크기의 체스판에서 퀸을 같은 행, 같은 열, 같은 대각선 위에 놓지 않을 수를 구하기. 문제 해법 4개의 퀸을 모두 다른 행에 놓으면서 해가 되는 퀸의 열의 위치가 어디인지 계산 Candidate 해 모두 다른 행에 대한, 가능한 모든 열의 조합 [(1,1),(2,1),(3,1),(4,1)], ..... , [(1,4),(2,4),(3,4),(4,4)] => 4-퀸 = 4 4 4 * 4 해의 개수 (n^n) State-Space Tree : 모든 ..
-
[알고리즘] LRUSW/Algorithm 2018. 1. 6. 18:30
운영체제를 공부했다면 누구나 한번쯤 들어봤을 것이다. 또한 정보처리기사에도 자주 출제되고 중요한 교체기법중 하나이다. 2017 하반기 카카오 코딩문제에도 출제될 만큼 중요한 것 같다. 운영체제를 공부하면서 이런 알고리즘을 이론적으로만 공부하면서 해결했지 직접 코딩을 해본적이없어서 시험에 마주쳤을 때 당황했다. 입력으로는 캐시 크기와 도시이름을 받고 출력으로는 걸리는 시간을 구하는 것 이다. cache hit일 경우 실행 1, cache miss일 경우 실행 5로 계산한다. cache hit : 요구되는 데이터가 이미 캐시에 로딩 되어 있는 경우이다. cache miss : 캐시에 존재 하지않을 경우 이다. LRU (Least Rescently Used) 란? LRU는 Least Rescently Used..
-
[알고리즘] Heap sortingSW/Algorithm 2018. 1. 6. 16:55
Heap sort 코드링크 insert delete min(max) Complete Binary Tree 순서대로 채워져있는 트리 배열사용 레밸의 맨 왼쪽은 2^h 루트에서 마지막 노드 = floor(logN) 2^h ~ 2^(h+1)-1개 노드 그 노드의 부모는 floor(k/2) 그 노드의 왼쪽 자식 2k, 오른쪽 2k+1 Binary Heap Binary Heap 특징 : 컴플릿트 바이너러 / min heap(부모는 자식보다 작거나 같다.) / max heap(부모는 자식보다 크거나 같다.) insert : 마지막 노드에 추가 하고 위치로 GO! (fix heap) delete(min/max) : 루트만 지울 수 있다. 루트를 삭제 마지막 노드를 루트로 올림. fix heap! Heap Constr..
-
[알고리즘] Greedy(탐욕법)SW/Algorithm 2018. 1. 6. 11:55
Greedy Algorithm (탐욕) 정의 : 매 선택에서 지금 이 순간 당장 최적인 해를 구함. 동적 계획법과 마찬가지로 최적화 문제를 푸는데 사용. 근시안적으로 해를 구할 당시에 가장 최적인 해를 구함. 동적 계획법처럼 반드시 최적의 해를 구한다는 보장이 없다. 한번의 선택이 다음 선택에서는 전혀 무관한 값이여야 하는 매순간의 최적해가 문제의 최적해. 과정 선택 : 현 상태에서 최적해에 포함시킬 대안을 선택 타당성 조사 : 선택된 해가 주어진 문제의 조건을 만족하는지 검사 해답 조사 : 원래의 문제가 해결되었는지를 조사 WHEN? 탐욕 알고리즘을 사용해 최적의 답을 구할 수 있다는 것이 쉽게 보이면 탐욕 알고리즘을 사용할 수 있는지가 의심스럽고 다른 알고리즘으로 답을 구할 수 있는 경우 사용X 탐욕..
-
[알고리즘] String MatchingSW/Algorithm 2018. 1. 6. 05:30
스트링 매치 코드링크 브로트포스 : 한 칸씩 옮기면서.. 매칭 O(m*n) m=패턴 / n=스트링 DFA KMP algorithm DFA (Deterministic Finite Automaton) 시작 스테이트 - accept 스테이트. 패턴에 알맞는 단어가 나오면 다음 스테이트. 내부적으로는 이차원 배열을 사용(1에서 A나오면 2번으로..) DFA construction x를 구한다. x = [들어온단어][전스테이트의 x] 이다. x는 그 다음스테이션의 기본값으로 세팅하면 된다. [들어온단어][스테이트]위치에 다음 스테이트 값(i+1)을 넣는다. 반복.. (마지막은 넣지않는다.) int x=0;for(int i=0;i AAA, AABB => null) 미스매치시 이부분을 다시 사용한다.AAABBAAAC..
-
채용알림서비스 만들기SW/Project 2018. 1. 5. 23:00
개요 인터넷에는 사람인, 잡코리아등 많은 구직 사이트가 존재하고 새로운 정보가 어마어마하게 있고 지금 또한 올라오고 있다. 나와 상관 없는 분야, 또는 같은 분야에서 내 관심분야 밖인 공고도 많이 볼 수 있다. 황금같은 시간을 조금이나마 줄이기 위해 나에게 적합한 공고, 내가 원하는 분야만 볼 수 있도록 시작하게 되었다.[깃허브/크롤링/셀리늄] Web Crawling 위사진과 같이 requests 와 BeautifulSoup을 import 한다. requests.get에 다가 크롤링 할 주소를 쓴다. 위에서 선언한 BeautifulSoup을 가지고 이쁘게 html을 뽑는다. 가지고온 html을 필요한 부분만 가지고 오기 위해서 soup.find_all을 사용한다. find_all안에 넣을 부분은 브라우져..
-
[알고리즘] Dynamic Programming (동적프로그래밍)SW/Algorithm 2018. 1. 5. 22:00
Dynamic Programming (동적계획법) 분할정복비법처럼 작은 문제들로 나누어 각각 해답을 찾고 원래 문제의 해답을 계산 하지만 중복이 발생하여 반복연산이 많아 수행시간이 길다. => 메모리제이션으로 해결(반복연산 제거) ex) 최적화 문제(최대,최소) : working backward기법 사용 (top-down 방법으로)-> 재귀식으로 정의 (중복계산발생)-> bottom-up 방식 -> 저장할 테이블을 생성 [앞 1~3번째 까지는 최적값을 계산하는 과정이고, 마지막은 최적해답을 계산하는 단계]factorial //많은 중복연산을 함. n=100int f(int n) //메모리제이션 - 미리저장{int i ,f[100];f[0]=1; //base casefor(i=1;i c(n) = c(n-1..