일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Operating System
- coding
- c++
- 문제풀이
- cs
- 자료구조
- 너비우선탐색
- OS
- 백준
- 정석
- 정석학술정보관
- bfs
- vector
- 스택
- 개발
- 컴공과
- 코딩
- 컴공
- 그래프
- 구현
- 오퍼레이팅시스템
- Stack
- 오에스
- 알고리즘
- 브루트포스
- 코테
- DP
- Computer science
- 북리뷰
- 컴퓨터공학과
- Today
- Total
목록전체 글 (304)
Little Jay

어느덧 마지막 파트에 다다랐다. Sys Level I/O를 다루기만 하면 시스템프로그래밍이라는 과목을 한번 다 돌아보게 되는 것이다. 이제는 UNIX I/O가 어떻게 작동하는지 알아보자. UNIX I/O Overview 파일은 Byte의 Sequence이다. 앞서서 배열, 구조체 등을 배울 때에도 잠깐 언급을 했었지만, 파일은 결국 Byte가 선형 배열로 놓여있는 것이다. 이를 Linear Array of Bytes라고 한다. 또한 모든 I/O Device는 파일로 편현이 된다. 예를 들어서 /dev/tty 라고 하면 터미널에 접근할 수 있게 된다. 그리고 각각의 파일은 시스템 내에서 수행하는 타입이 있다. Regular File : 임의의 데이터를 담고 있다. Directory:파일과 관련된 그룹의 I..
사실 내 힘으로 푼 문제는 아니다. 도저히 아이디어가 떠오르지 않아 다른 분들의 블로그를 참고했다. 식을 세우는데 어려움을 겪었는데 각 의상 종류별 + 1한 값의 곱에서 전체를 안입는 경우인 1을 빼주면 되는 식을 세우는 것이 결국 관건이었던 것 같다. 이거를 도출해낸다는게 쉽지 않았고 Silver 3문제였는데도 이 아이디어를 30분 넘게 고민하다가 안되서 결국 참고했다. #include #define endl '\n' using namespace std; int t, n; string name, cloth; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while (t--) { cin >> n; map mp; f..
기본적인 Floyd Warshall문제 사실 친구의 거리를 구하는것이 1이라서 BFS로도 풀 수 있는 문제인데 플로이드와샬을 좀 더 연습해보기 위해 플로이드와샬로 풀었다. 주의할 점은 거리(?)가 같을 때 작은 것의 번호를 출력해야한다는 것이다. #include #define endl '\n' #define INF 987654321 using namespace std; int n, m; int arr[101][101]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i a >> b; arr[a][b] = 1; arr[b][a] = 1; } for (int k = 1; k
Naive한 다익스트라 문제 #include #define endl '\n' using namespace std; #define INF 987654321 #define pii pair priority_queue pq; int graph[1005][1005]; int dist[1005]; int n, m; int u, v, w; int start, last; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i > v >> w; if (graph[u][v] > w) graph[u][v] = w; } cin >> start >> last; dist[start] = 0; pq.push(..
우리에게 가장 널리 알려진 고대철학자 중 한명인 소크라테스는 인간의 존엄성에 대한 그만의 정의를 이렇게 내렸다. “인간의 존엄성은 모든 사람들이 규칙, 법 등 즉 사회적 합의를 준수할 때만 보존될 수 있으며, 한 개인이 그러한 사회적 가치에 반대하더라도, 그것을 따라야 할 의무가 있다” 우리는 아래의 간단한 한 문장을 통해 인간의 존엄성에 대한 소크라테스의 생각을 더 잘 알 수 있다. “악법도 법이다” - Crito, Socrates 우리에게 이미 친숙한 이 문장은 소크라테스의 제자인 플라톤이 크리톤과 소크라테스 사이의 대화를 수록해 놓은 크리톤 (Crito)에서 찾아볼 수 있는 문장 중 하나이다. 소크라테스의 친구인 크리톤은 감옥에 갇혀있는 소크라테스에게로 가서 탈옥 할 것을 강력히 권유하고, 탈옥을 ..
처리해야하는 항목은 다음과 같다 문장의 맨 앞에 '_' 가 오는 경우 문장의 맨 뒤에 '_' 가 오는 경우 문장의 만 앞이 대문자인 경우 '__' 같이 언더스코어가 연속적으로 나오는 경우 대문자와 '_'가 복합적으로 나오는 경우 정도를 에러처리 해주면 나머지 구현은 쉽다. Python으로 풀면 더 간단할텐데 C++이라 코드도 길어지고 시간도 오래 걸렸다. toJava 함수에서 위험한 구간이 있는데 s[i + 1] == '_'인 경우를 체크해주는건데 메모리를 잘못 건드려서 seg fault가 날 수 있지 않을까를 생각해봤는데 그 경우의 수는 문장의 마지막에 '_'가 오는 경우이기 때문에 이미 체크를 해서 안전하게 넘어갈 수 있는 것 같다. #include #define endl '\n' using name..
이차원 배열을 사용해야하는 dp문제 #include #define endl '\n' using namespace std; int n, a, b; int minMul[501][501]; vector v; int matOrder(vector& v, int n) { for (int i = 1; i > a >> b; if (i == n - 1) { v.push_back(a); v.push_back(b); } else { v.push_back(a); } } cout
강연결요소는 DFS를 두번 실행해서 연결된 요소를 찾을 수 있다. stack에 방문한 순서가 아닌 finished 되는 순서로 넣어야하기 때문에 이 점을 주의해서 풀면 될 것이다. 정렬을 빡세게 수행했는데 이렇게까지는 안해도 될 것 같다. #include #include #include #include using namespace std; #define endl '\n' #define vvi vector #define vi vector #define vb vector int n, m; int follower[50001]; void first_dfs(int start, vb& visited, vvi& adj, stack& st) { visited[start] = true; for (auto next : a..

Wait 앞서서 Parent Process는 Child Process를 "Reap" 한다고 언급했다. 이는 Parent Process에서 wait 혹은 waitpid 함수 호출을 통해서 진행이된다. int wait (int *status); 위에 있는 것이 wait 함수의 원형인데, 말 그대로 자식 Process의 종료 상태를 얻어내는 것을 목표로한다. 다시말해 Child Process가 끝날때까지 current process를 progress시키지 않고 suspend한다. 이 함수의 return 값은 끝나기를 기대하는 Child Process의 PID 번호이다. 그것이 가리키는 정수는 자식 프로세스가 종료된 이유와 종료 상태를 나타내는 값으로 설정이 된다. 이를 알아보기 위해서는 wait.h 파일에 들..
백준 1197번 https://www.acmicpc.net/problem/1197 #include #define endl '\n' #define pii pair using namespace std; int V, E; int a, b, c; bool visited[10001]; vector graph; priority_queue pq; int answer = 0; void prim(int i) { visited[i] = true; for (auto u : graph[i]) { if (!visited[u.second]) pq.push({u.first, u.second}); } while (!pq.empty()) { auto temp = pq.top(); pq.pop(); if (!visited[temp.se..