문제 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 풀이 해당 문제를 보고 처음에 드는 생각은 원형 큐 문제인가? 생각이 들었다. 하지만 순회하면서 pop을 하고자 하는 index에 위치하는 값을 제거하는 것은 다소 비효율적이다. from collections import deque def solution(k, n): mans = deque([num + 1 for num in range(k)]) answer = [] cnt = n while mans: if cnt: mans.append(mans.popleft()) cnt -= 1 else: answer.append(str(mans.poplef..
문제 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 풀이 이 문제는 문제가 어려운게 아니라 처음에 문제를 접했을 때... 롸....? 이게 먼소리... 😣 라고 생각이 들었다. 문제를 찬찬히 읽으니 이건가? 하고 이해했다. 예제 입력 4, 3, 6, 8, 7 ,5, 2, 1이 주어지면 stack에 1 - n까지의 수를 어떻게 push, pop하여서 저러한 순열을 만들 수 있는가를 묻는 문제이다. 순열의 처음이 4, 3이 ..
페이지 교체 알고리즘에 따라, 효율적으로 페이지를 교체하거나 비효율적으로 페이지가 교체 될 수 있다. 이에 페이지를 교체하는 알고리즘을 알아보고자 한다. FIFO Algorithm 공간이 부족할 경우 가장 먼저 할당된 페이지를 할당 해제 하는 방식이다. 가장 간단한 방식으로 초기화 과정의 코드는 더 이상 불필요할 것이라는 아이디어로 설계되었다. 하지만 대체로 효율적이지 않다. 그림 1과 같이 FIFO 방식으로 페이지를 관리하게 되면, 페이지 공간이 부족할 경우 가장 먼저 추가된 값 부터 삭제 되는 것을 알 수 있다. FIFO 방식으로 입력되는 값에 대한 page fault 발생 횟수는 15이다. 단순히 삽입된 순서에 따라 page-out을 하게 되므로, 지속적으로 사용하는 페이지에 대해서 빈번하게 pag..
부족한 메모리를 대신하여, 상대적으로 사용할 수 있는 공간이 큰 보조 저장장치(HDD, SSD)를 사용하는 것이 가상 메모리이다. 한번에 프로그램의 모든 부분을 적재하는 것이 아닌, 현재 작업 처리에 필요한 부분만 적재하는 것과 마찬가지로 메모리가 부족할 경우 사용중이지 않은 부분을 보조 저장장치로 보내어 공간을 확보한다. Demanding Paging Demanding Paging은 그림 2와 같이 페이지 테이블의 valid/invalid를 통해 판단되어 page in을 할지 결정된다. 예를 들어, 페이지 테이블의 valid인 경우 메모리에 접근하고자 하는 정보가 할당된 상태여서 page in을 할 필요가 없다. 이와 달리 메모리에 접근하고자 하는 정보가 존재하지 않으면, page in을 통해 데이터를..