반응형

분류 전체보기 172

[OS] Introduction to Operating Systems

OS(Operating System)란? OS는 하드웨어를 관리하는 소프트웨어의 일종으로 컴퓨터에서 자원 관리자의 역할을 한다. CPU, Memory, Disk 등 하드웨어를 struct로 정의해 각각 Process, Virtual Memory, File System을 만들어낸다. OS는 kernel 함수를 이용해 하드웨어를 관리하며, 사용자는 kernel 함수를 직접 호출하지 않고 시스템 콜을 사용한다. OS를 통해 사용자는 프로그램을 보다 쉽게 사용할 수 있고 시스템이 정확하고 효율적으로 작동하는지 확인할 수 있다. 이를 가능하게 하는 것이 OS의 핵심 개념인 추상화와 가상화이다. 추상화 VS 가상화 추상화(Abstarction) : HW의 구체적인 구조 등을 숨기고 클래스나 구조체로서 사용자에게 인..

운영체제(OS) 2022.10.14

[C++] STL - next_permutation

next_permutation C++의 algorithm 헤더에 존재하는 next_permutation은 컨테이너에서 만들 수 있는 다음 순열을 반환하는 STL이다. next_permutation 이용한 순열 구하기 int main() { int n, k; cin >> n >> k; // n개의 원소 중 k개 나열하는 순열 vector v; for(int i = 0; i > x; v.push_back(x); } sort(v.begin(), v.end()); // 오름차순 정렬이 되어있어야함 do { for(int i = 0; i k; // n개의 원소 중 k개 선택하는 조합 vector v; for(int i = 0; i < n; ..

C, C++ & Linux/C++ 2022.08.01

[알고리즘 이론] 비트마스크(BitMask)

비트마스크(BitMask) 비트마스크(BitMask)는 정수의 이진수 표현을 자료구조 처럼 사용하는 기법이다. 0과 1을 이용하여 비트를 표현하며 해당 비트가 0인 경우 "꺼져있다", 1인 경우 "켜져있다" 라고 말한다. 비트마스크의 장점 수행 시간이 빠르다 - 비트 연산이므로 O(1)에 구현되는 연산들이 많다 메모리 효율성 - 하나의 정수는 32비트기 때문에 2^32 가지의 표현이 가능하다. 코드의 간결성 비트마스크를 이용한 집합 구현 집합 구현은 비트마스크의 가장 대표적이고 중요한 사례이다. 하나의 비트는 원소 하나를 의미하게 되며 비트가 켜진 경우 포함, 꺼진 경우 미포함을 의미한다. 즉, N비트 정수 변수는 N개의 원소를 가지는 집합의 부분집합들을 모두 표현할 수 있다. 이는 N개의 bool형 원..

[BOJ] 1062 - 가르침

https://www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net #include using namespace std; bool alpha[26] = {false, }; vector words; vector new_alpha; vector results; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; for(int i = 0; i < n; i++){ s..

알고리즘/BOJ 2022.08.01

[BOJ] 4179 - 불!

https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문 www.acmicpc.net #include #include #include using namespace std; int r, c; int cnt = 0; string board[1001]; int board_fire[1001][1001]; int board_path[1001][1001]; int dx[4] = {-1, 0, 1, 0}; int dy[4] = {0, 1, 0, -1}; queue path; qu..

알고리즘/BOJ 2022.07.10

[BOJ] 2580 - 스도쿠

https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net #include #include using namespace std; int cnt = 0; bool flag = false; int board[9][9] = {0, }; vector blank; bool check(int x, int y){ int square_x = x % 3; int square_y = y % 3; for(int i = 0; i < 9; i++){ if(board[x][i] ..

알고리즘/BOJ 2022.07.04

[C++] STL - pair, tuple

pair pair는 지정한 2개의 타입의 데이터를 저장하는데 사용한다. 이를 통해 서로 연관된 2개의 데이터를 한 쌍으로 묶어서 다룰 수 있다. pair는 헤더파일에 존재하며 과 헤더파일에 가 포함되기 때문에 셋 중 하나를 사용할 수 있다. make_pair() 함수를 통해 pair 객체를 만들 수 있고 각각 first와 second를 통해 첫번째, 두번째 데이터에 접근할 수 있다. #include #include #include #include using namespace std; int main(){ pair p; p = make_pair(10, 20); cout

C, C++ & Linux/C++ 2022.07.01

[BOJ] 1339 - 단어 수학

https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net #include #include #include #include using namespace std; bool desc(int a, int b){ return a > b; } int alpha[26] = {0, }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector v; for(int i = 0..

알고리즘/BOJ 2022.07.01

[C++] STL - list

list 앞서 봤던 벡터와 덱이 배열 기반 시퀀스 컨테이너였다면 리스트는 노드 기반 이중 연결 리스트로 구현된 시퀀스 컨테이너이다. 따라서 벡터, 덱과 달리 임의의 위치에 있는 원소에 바로 접근할 수 없고 반복자를 통해 순차적으로 접근할 수 밖에 없다는 단점이 존재한다. ※ 리스트의 반복자 리스트의 반복자의 경우 순차적인 작업밖에 수행하지 못하기 때문에 ++, -- 와 같은 연산만 수행할 수 있다. 즉, itr + 5 와 같은 연산은 불가능하다. 하지만 벡터와 덱에서 O(n) 이었던 임의의 위치에 원소 추가 / 제거하는 작업을 O(1)에 수행할 수 있다는 장점이 있다. 리스트의 경우 원하는 위치의 앞과 뒤에 있는 링크값만 바꾸어주면 되기 때문이다. 임의의 위치 원소 접근 순차탐색만 지원 O(n) 맨 앞에..

C, C++ & Linux/C++ 2022.06.29
반응형