본문 바로가기

분류 전체보기

(55)
[OS] Page size <-> offset, page 개수 계산하기 일반적인 page size인 4KB로 생각해보자. 4KB = 2^12B 즉 한 page에 2^12개의 바이트가 저장될 수 있다. 각각의 바이트를 구분하려면 0 ~ 2^12의 숫자가 필요하다. 즉 12bit가 필요한 것이다. offset은 한 page 내부에서의 위치를 표현하기 위한 것이므로 offset으로 12bit를 사용하게 된다. 이번엔 page단위로 살펴보자. (내부가 아닌) 어느 4byte짜리 주솟값을 생각하자. 4byte는 32개의 bits로 이루어져 있고, 이 32개의 bit로 virtual addr를 저장한다. 이때 하위 12bit는 페이지 내부에서의 offset을 담게 되는 것이지, 몇번째 page인지를 의미하는 page number를 담을 때는 그 보다 상위 bit들만을 사용하게 될 것이..
[C++] 2293 동전1 | DP(Dynamic Programming) 비슷한 문제를 몇번 풀어본 것 같은데, 감이 잘 안 잡혔고 풀이를 읽어봐도 잘 이해가 안 됐었기 때문에 논리를 한번 정리해보려한다. 1. 풀이 우선 dp로 저장할 배열의 크기는 n * k + 1이다. dp[i][j]에 j원을 만드는 데 i번째 동전까지 고려하여 경우의 수를 저장한다. (i = 0, 1, ...) k가 아닌 k + 1인 이유는 0원을 만드는 경우를 1로 저장하여 뒷쪽 요소에서 활용하기 위함이다. 문제에 주어진 예시를 이용해 자세히 설명해보자. 3 10 1 2 5 dp[1][5]에 5원을 만드는데 1번째 동전까지 고려하여 경우의 수를 저장할 것이다. 즉, 1원과 2원으로 5원을 만드는 경우의 수가 저장된다. 이때 1번째 동전인 2원을 기준으로 하여 안 쓰는 경우와 쓰는 경우로 나누어 생각한다..
[C++] 2512 예산 | 이진탐색(Binary Search) 1. 이진 탐색 반복문에서 빠져나오는 부분을 깔끔하게 구현하는 것이 어렵다. 44~51 줄에서 고민을 많이 했는데, 다른 분들의 코드를 참고해서 수정해볼 예정이다. break를 쓰지 않고, while의 조건인 min
[C++] 2660 회장뽑기 | 그래프(Graph) 1. 간단한 그래프 탐색 문제이다. edge의 방향성에 대한 설명이 없으니 양방향 그래프다. 그래프 node와 edge 입력은 요새 벡터 리스트를 만들어 각 벡터요소가 하나의 node이고 edge로 연결된 node들을 벡터에 추가하는 방식을 자주 활용한다. 2. 회원 i를 root로 생각했을 때, 그래프의 depth가 '점수'가 된다. 문제 설명은 한번 읽으면 난해하게 느껴지지만, 예시를 한번 그려보면 쉽게 상황 파악이 된다. 3. 코드 #include #include #include #include using namespace std; int N; int BFS(vector *fri, int root) { bool *visited = new bool[N](); visited[root] = true; i..
여름방학 백준 스터디 후기 + 완벽주의 대한 생각 정리 어느새 대학에서의 마지막 학기가 개강했다. 방학 끝무렵에는 모든 의욕을 상실하고 게임만 한 것 같다. 4학년이 이렇게 시간을 날릴 수도 있구나.. 다시 마음을 잡아보고자, 여름방학 8주간 백준 스터디를 했던 경험을 정리해봐야 겠다. ps.. 백준 스터디는 학기 중에도 문제 수를 줄여 계속 진행하기로 했다. 1. 선정된 10개의 문제만 풀기에는 내 실력이 부족했다. 하지만 실력과 시간이 10개 마저도 풀기 어렵게 만들었다. 그럼 어떻게 해야 할까? 문제를 다 못풀더라도 몇몇 유형을 꼼꼼히 공부하는 방법과 특정 유형을 제대로 타파하지 못하더라도 꾸준히 숙제를 완성하는 방법이 있다. 두 방법 모두 좋은 방법이지만, '꼼꼼하게' 라는 것에 지나친 완벽주의로 스트레스를 받는 내 성향을 고려해서 두번째 방법으로 선..
[C++] 11000번 강의실 배정 - 문제 해결 Point 1. 문제 해결 Idea 문제를 읽고 처음 생각해낸 Idea는 일찍 끝나는 수업부터, 공백이 최소가 되도록 배치하자! 였다. 이 생각을 바탕으로 머리를 쥐어짜보고, 도저히 안돼서 다른 분들 풀이도 읽어보니 이 문제를 풀기 위한 (그리고 풀이를 이해하기 위한..) 가장 중요한 Point는 다음과 같다.. ^-ㅠ 배치 완료된 수업 목록은 끝나는 시간을 기준으로, 새로 배치할 수업은 시작 시간을 기준으로 생각해야한다. 2. 해설 ex) 입력 : 4 1 3 2 4 4 6 3 11 출력 : 2 배치 완료된 수업 목록은 sche 에 넣는다. 그럼 새로 배치할 수업은 sche 의 top인 "가장 일찍 끝난 수업"과만 만나서 합칠 수 있는지 여부를 체크할 것이다. -> 이때 "가장 일찍 끝난 수업"과도 합칠 수 없다면..
[GitHub] 처음 원격 저장소에서 내 로컬 저장소로 프로젝트 받아올 때 (클론하는 법) 자꾸 까먹어서 정리해본다. 먼저 git bash를 이용해서 클론하는 방법이다. 1. 깃헙 홈페이지에서 원격저장소 주소 복사 2. 로컬 저장소의 원하는 폴더에서 git init 3. git clone (원격저장소 주소) 4. 프로젝트 폴더 내부로 이동 5. git pull origin (원하는 원격 브랜치) 다음으로 github desktop을 이용해서 클론하는 방법이다. 1. 깃헙 홈페이지에서 원격저장소 주소 복사 2. github desktop 좌측 상단의 "Current repository" - "Add" - "Clone repository..." 를 누른다. 3. "URL" 탭에 복사한 주소를 붙여넣고, 로컬 저장소 폴더를 지정한다. 4. "Clone" 버튼을 누르면 끝!
[백준 PS 스터디] 5주차 진단 너무 답답할 때가 많다. 거의 90%는 실버에서 푸는데, 떠오르는 아이디어들은 진부하게 느껴진다. 풀이법을 검색해보기는 너무 싫은데, 답답해서 몸에 열도ㅋㅋㅋ나고 짜증날 때 쯔음 검색해서 살짝 읽어보고 다시 풀면 너무나도 환상적으로 풀린다....... 그래서 도전의식을 자꾸만 높아지고 내 실력은 시간이 지나도 처참하고.. 나중에 PS 장인이 되면, 이런 상태는 어떤 level인지 마치 어렸을 때 영어학원가서 레벨테스트 보듯 진단해보고 싶다.