분류 전체보기(1142)
-
교착상태 Dead lock
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리는 무한 대기 상태 예) 스레드 A, B가 존재하고 자신의 자원은 반환하지 않은 상태에서 상대방의 자원을 요구하는 상태 데드락이 생기기 위한 조건 1. 상호배제 : 둘 이상의 스레드는 동시에 공유자원을 사용할 수 없다 2. 순환대기 : 서로 원하는 자원이 있는 상대방이 순환적으로 연결되어 있다 3. 비선점 : 수행이 완료되기 전까지는 자원을 반납하지 않고, 상대방도 가져갈 수 없다 4. 점유대기 : 자신의 자원을 반환하지 않은 상태에서 상대방의 자원을 요구하고 있다 데드락을 방지하기 위해서는 조건 중 하나라도 성립하지 않으면 된다. 하지만 자원의 낭비가 심하다는 단점이 있다
2019.10.31 -
AD5933 Impedance Analyzer Source Code
https://people.ece.cornell.edu/land/courses/eceprojectsland/STUDENTPROJ/2006to2007/yz226/CIM%20Code.c
2019.10.31 -
cin으로 방어적 프로그래밍
프로그램을 만들 때 사용자의 입장에서 생각해야 한다. 사용자가 입력 범위를 벗어나도, 프로그램을 종료하지 않고 경고 메세지를 띄우거나 따른 조치를 취해야만 한다 1. 하나의 입력에서 여러 데이터를 입력해서 버퍼에 남아있을 때 - cin.ignore은 버퍼를 비워주는 행위로, (비워야하는 최대 사이즈, delimeter)로 최대 사이즈에서 마지막으로 delimeter를 만날 때까지 비워주게 된다 2. 입력 범위를 초과하는 값을 입력했을 때 - cin.fail로 검사할 수 있으며, 위 조건을 만족했을 시 true를 반환한다 #include using namespace std; int main(void) { int x, y; char op; cin >> x; cin.ignore(32767, '\n'); cin..
2019.10.31 -
병합정렬
분할정복의 대표적인 예 merge : 정복, sort : 분할, 2개의 함수로 구성되어 있다 1. stable sort 중 하나로 중복 키 순서가 보장된다 2. 평균, 최악, 최고의 시간복잡도는 동일하게 O(NlgN)이다 3. 임시로 저장해야하는 배열이 있어야하므로 기존보다 2배의 메모리를 잡아먹는다 위 채점은 merge sort로 아래 채점은 heap sort이다 깃허브주소: https://github.com/surinoel/boj/blob/master/merge_sort.cpp
2019.10.31 -
점 3개의 방향 알아내기 CCW, CW
x, y 좌표평면에 점 3개가 있고, 넓이를 구함으로써 이어진 점들의 방향이 CW, CCW임을 알 수 있다 [참고] https://www.acmicpc.net/blog/view/27 참고문제: https://www.acmicpc.net/problem/11758 깃허브주소: https://github.com/surinoel/boj/blob/master/11758.cpp
2019.10.31 -
재귀의 장단점
단점 > 함수를 반복적으로 호출하면서 생기는 메모리 사용량과 오버헤드로 인해 성능이 저하된다는 점이 있다. 호출이 되면서 리턴할 주소와 내용들을 저장하고, 돌아갈 때도 이를 불러온다는 점에서 시간이 지연된다 장점 > 특정 알고리즘 구현에 대해서는 보다 표현이 자연스러울 수 있다 (가독성) - 퀵 정렬, 병합 정렬 - 팩토리얼 구하기 - 그래프 DFS
2019.10.30