Fascination
article thumbnail
[OS] Chapter 05. 병행 프로세스와 동기화

Chapter 05. 병행 프로세스와 동기화 누워서 보는 운영체제 이야기 - 김주균 교수님 ▶ 병행(Concurrent) 같이 (메모리에) 존재하고 있다는 뜻 메모리에 다수의 프로세스가 같이 존재한다는 것과 같은 의미 CPU 하나가 있는 단일처리 시스템에서는 병행 프로세스 중 한 개만이 실제로 실행되지만, CPU 처리 시간을 효과적으로 나눔으로써 겉으로는 병행 프로세스들이 동시에 처리되는 것 ▶ 병렬(Parallel) 다중처리 시스템의 경우는 여러 개의 프로세스가 동시에 실행 ▶ 비동기적(Asynchronous) 프로세스들이 어떤 상태에 있는지, 어떤 자원을 가지고 있는지, 어디까지 실행됐는지 등에 대해 모른 체 실행되고 있음을 의미 # 5.1 병행 프로세스(Concurrent Proccess) ex1 ..

article thumbnail
[C++] BOJ 13706 : 제곱근
CODE/BOJ 2021. 10. 3. 00:33

[문제] 13706번: 제곱근 첫째 줄에 양의 정수 N이 주어진다. 정수 N의 제곱근은 항상 정수이며, N의 길이는 800자리를 넘지 않는다. www.acmicpc.net [문제 풀이] - 풀이 1) sqrt 라이브러리 사용 - 풀이 2) 이분탐색법 사용 > mid의 제곱이 원래 값과 같아질 때까지 반복시킴 [코드] - python: 백준 통과 코드 import math a=int(input()) print(math.isqrt(a)) - C++: 백준 통과 X --> 로직 문제인 것 같다는 결론이 많음 #include #include using namespace std; int main() { int n; cin>>n; int low = 1; int high = n; int mid; while (1) {..

article thumbnail
[C++] BOJ 10829 : 이진수 변환
CODE/BOJ 2021. 10. 3. 00:07

[문제] 10829번: 이진수 변환 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000,000,000,000) www.acmicpc.net [문제 풀이] 풀이 1) 스택을 사용하여 2로 나눈 나머지를 저장하고 이를 pop하여 거꾸로 출력함 풀이 2) 재귀 호출을 사용하여 나머지가 0 혹은 1이면 출력하고 그렇지 않으면 재귀호출 시행 [코드] - 풀이 1 #include #include using namespace std; int main() { stack s; long a; cin>>a; do{ s.push(a%2); a/=2; }while(a!=0); do{ cout

article thumbnail
[C++] BOJ 10867 : 중복 빼고 정렬하기
CODE/BOJ 2021. 9. 19. 01:44

[문제] 10867번: 중복 빼고 정렬하기 첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. www.acmicpc.net [문제 풀이] - 동적할당으로 배열 생성 - 수 입력받기 - sort()로 정렬 - 출력하면서 이전 인덱스와 같은 숫자면 출력 X [코드] #include #include using namespace std; int main() { int tc; cin>>tc; int *a = new int[tc]; for(int i=0;i>a[i]; } sort(a,a+tc); cout

article thumbnail
[C++] BOJ 10814 : 나이순 정렬
CODE/BOJ 2021. 9. 19. 01:40

[문제] 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net [문제 풀이] - List 구조체 선언 후 - List 형식을 가지는 vector 생성 - compare 사용하여 sort()로 나이순 오름차순 정렬 [코드] #include #include #include using namespace std; struct List{ int age; string name; }; bool compare(const List &i, const List &j){ return i.age>tc; vector person; List lis..

article thumbnail
[C++] BOJ 2693 : N번째 큰 수
CODE/BOJ 2021. 9. 19. 01:34

[문제] 2693번: N번째 큰 수 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000 www.acmicpc.net [문제 풀이] - sort()사용하여 오름차순으로 정렬 - 3번째로 큰 수는 크기가 10인 배열에서 인덱스 7을 가짐 - 인덱스 7인 원소를 출력 [코드] #include #include using namespace std; int main() { int a[10]; int tc; cin>>tc; for(int i=0;i

article thumbnail
[C++] BOJ 11279 : 최대힙
CODE/BOJ 2021. 9. 16. 11:05

[문제] 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net [문제 풀이] - 우선 순위 큐를 사용 - 입력 받은 수가 0일 때, 큐가 비어 있으면 0을 출력하고 아니라면 가장 위에 있는 수를 출력 [코드] #include #include using namespace std; int n; // 입력받을 정수의 개수 priority_queue pq; int main() { cin.sync_with_stdio(0); // 시간 초과 해결 cin.tie(0); cin >> n; for (int i=0..

article thumbnail
[C++] BOJ 1158 : 요세푸스 문제
CODE/BOJ 2021. 9. 16. 10:54

[문제] 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net [문제 풀이] - 인덱스에 해당되지 않는 사람은 다시 순환큐의 성질을 이용해서 맨 뒤에 삽입하여 재검사 할 수 있도록 함 [코드] #include #include using namespace std; int main(){ int n,k; scanf("%d %d",&n,&k); queue q; for(int i=0;i

article thumbnail
[C++] BOJ 12605 : 단어순서 뒤집기
CODE/BOJ 2021. 9. 15. 11:19

[문제] 12605번: 단어순서 뒤집기 스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 www.acmicpc.net [문제 풀이] - 단어의 개수가 5로 고정이지만 우선 입력 받는 것으로 처리 - 문장을 입력받고 토큰 단위로 stack에 저장 - pop하여 단어 순서를 뒤집음 [코드] #include #include #include using namespace std; class Word{ public: string words; }; int main() { Word stack[52]; int top = -1; string str; int n; cin>>n; cin.i..

article thumbnail
[C++] BOJ 17608 : 막대기
CODE/BOJ 2021. 9. 15. 11:09

[문제] 17608번: 막대기 아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 www.acmicpc.net [문제 풀이] - 우선 막대기를 입력받으며 stack에 저장 - 하나씩 pop하며 가장 높은 막대기와 비교 - 맨 오른쪽 막대기는 무조건 보이는 것임 [코드] #include #include using namespace std; int top=-1; int stack[100000]; int main() { int tc=0,num=0; int count=0, pre=0, com=0; cin>>tc; cin.ignore(); for(int i=0;i>num; ci..