본문 바로가기

분류 전체보기

(133)
백준 21343번 Great Expectation 문제 스피드런을 진행하려고 한다. $n, r, m$이 주어지는데 $n$은 이상적으로 진행했을 때의 걸리는 시간이고 $r$은 깨고자 하는 기록이다. 즉, 전체 시간을 $r$보다 작게 스피드런을 끝내고 싶다. 스피드런 도중에는 $m$개의 이벤트가 있는데 이 이벤트에 성공하면 그대로 진행하는 것이고, 실패하면 추가적으로 시간을 사용하게 된다. 이벤트에 대한 정보는 $t, p, d$로 주어지는데 각각 이벤트가 일어날 시각, 성공확률, 실패 시 추가로 드는 시간이다. 스피드런 도중에 언제든지 리셋을 할 수 있다. 이런 상황에서 전체 진행시간을 $r$보다 짧게 만드는 데 걸릴 시간의 기댓값을 구하시오. $ 2 \le n \lt r \le 5000$, $ 1 \le m \le 50$, $ 1 \le t \lt n$,..
Splay Tree와 amortized 시간복잡도 본 글은 이 자료의 전반부를 포스트로 옮긴 것입니다. 독자가 Binary Search Tree와 알고리즘의 연산 시간을 계산하는 법을 안다고 가정하고 글을 작성합니다. Self-Balancing Binary Search Tree(BBST) 이진 검색 트리는 각 노드마다 key를 가지고 있으며 어떤 노드 x의 left children에는 x의 key보다 작은 key를 가지고 있는 노드들이 존재하며, right children에는 x의 key보다 큰 key를 가지고 있는 노드들이 존재하도록 구성한 이진트리입니다. 따라서 이 자료구조는 inorder로 탐색을 진행했을 때, 그 순서가 노드들의 key값을 정렬한 순서와 동일합니다. 그리고 이 순서를 유지하도록 하면서 노드의 삽입, 읽기, 갱신, 삭제(CRUD)를..
Pintos Project 1 Threads. Advanced Scheduler 우선순위 스케쥴링을 하게 되면 발생하는 문제 중 하나로 우선순위가 낮은 스레드가 긴 시간동안 CPU를 점유하지 못하는 starvation 문제가 있다. 이를 해결하기 위해서 pintos document가 제시하는 방법은 BSD Scheduler이다. 기본 골자는 CPU를 많이 점유했던 애들의 우선순위는 낮추는 방향으로, CPU를 점유하지 못했던 스레드들의 우선순위는 올리는 방향으로 런타임 중에 우선순위들을 꾸준히 수정해주는 것이다. 이를 위해서 스레드별로 nice, recent_cpu라는 값을 새로 정의하고 시스템 전체에서 load_avg라는 값을 따로 관리하게 된다. 스레드의 우선순위는 $PRI\_MAX - recent\_cpu/4 - nice*2$로 결정된다. nice란 스레드의 nice한 정도라고 ..
백준 16318번 Delivery Delays 문제 요약 정점 $n$개, 간선 $m$개의 무방향 그래프가 주어진다. 해당 그래프의 1번 노드에 피자집이 있다. $k$개의 피자 주문이 들어오는데 각 주문은 $s_i, u_i, t_i$로 들어오는데 각각 주문이 들어온 시각, 주문이 들어온 노드의 번호, 해당 주문의 피자가 완성되는 시간이다. 이 피자들을 주문이 들어온 순서대로 배달하려고 한다. 시각 0에 1번 정점에 위치하며, 들고다닐 수 있는 피자의 수에 제한은 없다. 이 때, 각 주문의 대기시간의 최댓값을 최소화 하여라. $ n \le 1000$, $ m \le 5000$, $ k \le 1000$, $ 0 \le s_i \le t_i \le 10^8 $ 풀이 들고다닐 수 있는 피자의 수에 제한이 없으므로 피자집에서 다른 피자가 준비 완료될 때까지 ..
Pintos Project 1 Threads. Priority Donation 우선순위를 스케쥴링을 할 때, 현재 실행중인 얻고자 하는 lock을 소유하고 있는 스레드가 나보다 우선순위가 낮다면 lock을 절대 얻지 못하는 문제가 발생한다. 이를 해결하기 위한 방법으로 제시하는 것이 priority donation이다. lock을 소유하고자 하는 스레드에서 lock을 소유하고 있는 스레드의 우선순위를 자신만큼 올려주는 것이다. 이를 priority donation이라고 부른다. 다행히도 테스트에서 요구하는 것은 lock에 대해서만 이를 구현해주는 것이다. 이제 donation은 lock에 대해서만 일어난다고 가정하고 진행하자. 일단, donation이 일어날 조건은 현재 실행중인 스레드가 소유하고자 하는 lock이 다른 스레드에 의해서 점유되어 있고 그 스레드는 실행되고 있지 않은..
Pintos Project 1 Threads. Priority Scheduling Project 1의 중요 목표로 우선순위 스케쥴링을 구현해야 한다. 기존의 스케쥴러는 FIFO(First-in First-out) ronud-robin 방식으로 스케쥴링을 하고 있다. 이것을 우선순위 스케쥴링으로 바꿔줘야 한다. 이를 위해 신경써야 할 부분은 아래와 같다. FIFO 형식으로 다음 실행될 스레드를 찾고 있는데, 이를 우선순위가 높은 스레드부터 찾도록 바꿔줘야 한다. ready_list가 ready queue의 역할을 하고 있는데 ready_list를 우선순위가 높은 스레드가 먼저 오도록 유지하게 하자. ready_list뿐만 아니라 semaphore를 기다리고 있는 스레드들 중에서도 우선순위가 높은 스레드부터 semaphore를 소유할 수 있도록 해야 한다. 현재 스케쥴러는 실행되고 있는 ..
Pintos Project 1 Threads. 소개 및 Alarm Clock pintos는 스탠포드에서 만든 교육용 OS이며, skeleton 코드만 주어지고 보통 학생이 비어있는 기능들을 채워나가며 과제를 수행한다. 국내외 대학교 중에 이를 운영체제 수업시에 전체 학기 동안 진행하는 과제로 선택하는 경우가 많다. 과제는 크게 Threads, User Program, Virtual Memory, File system으로 나눠진다. 학교에서 운영체제 수업을 들으면서 Threads 일부분, User Program은 전부, VM도 일부 해봤는데 그냥 전체를 다 해보고 싶어서 얼마 전부터 정말 조금씩 하고 있다. 현재 Threads의 일부를 마쳐서 그 내용을 정리하고자 글을 쓴다. Project1 Threads 이 프로젝트는 세가지 부분으로 나뉜다. 첫째는 Alarm Clock(slee..
백준 21279번 광부 호석 문제 요약 점 $(X_i, Y_i)$가 $N$개 주어진다. 이 때, $(0, 0)$을 왼쪽 아래 꼭짓점으로 하고 $(H, W)$를 오른쪽 위 꼭짓점으로 하는 직사각형을 그리고자 한다. 이 때, 직사각형에 포함되는 점의 개수는 최대 $C$개이다. 각 점에 대응하는 가치인 $V_i$도 주어지는데 조건을 만족하는 직사각형 중에서 포함되는 점들의 가치의 합이 최대가 되게 그렸을 때의 그 최댓값을 출력해야 한다. $ 1 \le N \le 500,000$, $1 \le C \le N$, $ 0 \le X_i, Y_i \le 100,000$, $1 \le V_i \le 10^8$ 풀이 우리가 그리고자 하는 직사각형의 오른쪽 위 꼭짓점을 위주로 풀이를 진행해보자. 이 꼭짓점의 $y$좌표를 $a$로 고정했다고 하자. 그..