분류 전체보기

1. 스레드란? 스레드의 정의는 프로세스 내부에서 실행되는 실행 흐름의 단위이다. 정의는 위와 같지만 어렵기 때문에 스레드는 한 프로세스 내부의 자원을 공유하면서 프로세스를 여러개로 쪼개서 실행시키는 것을 말한다. 프로세스끼리는 서로 자원 공유를 못하지만 스레드는 한 프로세스 내에 여러개가 존재하기 때문에 한 프로세스의 자원을 공유할 수 있다. 이처럼 한 프로세스 내에 여러개의 스레드가 존재하는 것을 멀티 스레드라고 한다. 싱글 스레드는 일반적인 프로세스 구조이기 때문에 이 포스팅에서는 멀티스레딩에 대해서 설명할 것이다. 2. 멀티 스레드(Multi Thread)란? 위에서 설명한 것과 같이 한 프로세스 내에서 여러개의 스레드가 존재하는 것을 멀티 스레드라고 한다. 스레드 입장에서 보면 프로세스는 스레드..
https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 1. Logic 고슴도치는 물로 찰 예정인 곳은 못가기 떄문에 고슴도치 이동보다 물 이동을 먼저 해줘야 한다. BFS두번 돌려주고 while(true)문 탈출하기 위해 옮겼는지만 확인해서 탈출만 잘 해주면 된다. 2. Code #include using namespace std; const int INF = 0x3f3f3f3f; int r, c; int sy, sx; int goalY, goalX; int d..
https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 1. Logic 주어진 규칙에 맞춰 그대로 구현하면 됨. 뱀의 머리와 길이까지의 좌표를 저장하는 덱을 생성해서 넣다뺐다 해주면 됨. 1. 덱에 다음에 머리가 갈 좌표를 front에 넣어줌 + 이동 횟수 1 올려주기 2. 게임에서 지게되는 조건 확인 3. 머리가 이동한 곳 방문 처리하여 뱀이 있는곳 표시(이걸 2번보다 먼저하면 항상 게임에서 지게되는 조건이 만들어짐) 4. 머리가 이동한 곳에 사과가 없으면..
https://www.acmicpc.net/problem/20040 20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net 1. Logic 유니온 파인드를 사용해서 입력받은 노드를 연결해준다. merge를 하게되면 서로의 root노드가 정해진다. 이 root노드가 같은 것 끼리 연결하게 되면 사이클이 생긴다. 즉 merge하기 전 부모 노드를 찾고 이후에 서로의 루트 노드가 같으면 사이클이 있기 때문에 출력해주고 루트 노드가 다르면 merge 해준다. 2. Code #include using namespace s..
https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 1. Logic 낚시꾼이 물고기를 잡고 그 이후에 상어가 이동을 한다. 함수 로직 순서는 이렇고, 이 문제를 풀면서 두번 막혔는데 두개만 잘 생각하면 풀기 쉬운 문제인 것 같다. 두개를 생각하는게 어려워서 그렇지,, (내 기준) 1. 배열은 0부터 시작한다. 아주 기초적이지만 이거때문에 상어를 이동하는 로직에서 한번 틀렸다..ㅜ 답이 이상해서 출력해보다가 테케 1번의 3번상어가..
https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 1. Logic 처음에 문제를 봤을 때 유니온 파인드로 푸는 줄 알았다. 정 안풀려서 블로그를 참고해서 풀이했다,, r1-r2, rn-r1 끼리 팀을 맺는다는 말은 순환이 있는 그래프끼리 팀을 맺는다는 말이다. 재귀를 활용해서 vis배열에 방문을 처리하면서 방문처리된 배열에 group배열(그룹이 만들어졌다는, 순환하는 그래프의 노드를 표시)이 false라면 그룹을 만들 수 있는 상황이기 때문에 연결된 ..
동기(Synchronous) & 비동기(Asynchronous) 동기와 비동기는 작업 순서에 관점을 둔다. 동기(Synchronous)는 작업 완료 여부에 따라 순차적으로 처리하는 것을 말한다. 프로세스 처리 순서가 A > B > A라고 했을 때 A가 완료된 후 B가 실행되고, B가 완료된 후 A가 순차적으로 처리된다.즉 작업의 순서가 보장되어야 한다. (동시성 - Concurrency) 비동기(Asynchronous)는 작업 완료 여부가 새로운 작업을 실행하는데 영향을 미치지 않는다. 프로세스가 A, B, C순서대로 시작한다고 해도 프로세스가 종료되는 순서는 A, B, C순서대로 종료된다는것을 보장하지 못한다. 즉 작업의 순서가 보장되지 않는다. (병렬성-Parallelism) 블로킹(Blocking)..
1. IPC 란? 프로세스는 스레드와 다르게 독립적으로 실행된다. 이처럼 독립적인 자원을 가진 프로세스끼리 통신에 사용되는 기법을 IPC 라고 한다. 2. 생산자-소비자 문제(Producer-Consumer Problem) 생산자란 말 그대로 정보를 생산하는 역할, 소비자란 정보를 소비하는 역할이다. 이렇게 들으면 이해가 잘 안가기 때문에 예시를 들어보자면 1. 생산자 : compiler > 어셈블리 코드 생성 // 소비자 : assembler > 어셈블리 코드를 소비하여 기계어 변환 2. 생산자 : 웹 서버 > request시에 웹 페이지 HTML코드 생성 // 소비자 : 브라우저 > HTML코드를 소비해서 화면에 랜더링 함. 이정도가 대표적인 생산자-소비자에 대한 예시가 될 것 같다. 그래서 다시 생..
https://www.acmicpc.net/problem/1918 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net 1. Logic 중위 표기식은 연산자가 연산이 필요한 곳에 위치하는 우리가 흔히 쓰는 연산식이다. 반면 후위 표기식은 컴퓨터가 사용하는 연산자가 뒤에 있는 표기식이다. 컴퓨터는 우리가 아는 중위 표기식을 후위 표기식으로 변환해서 연산을 진행한다. 이 과정에서 스택이라는 자료구조가 필요하다. 중위 표기식 > 후위 표기식 변환 로직 1. 피연산자(연산하고싶은 숫자) 무조건 출력 2. 연산자인 경우..
https://www.acmicpc.net/problem/1922 1922번: 네트워크 연결 이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다. www.acmicpc.net 1. Logic 최소 스패닝 트리 기본 문제 2. Code Kruskal #include using namespace std; int v, e; int parent[1001]; vector graph; int find(int x) { if(parent[x] == x) return x; return parent[x] = find(parent[x]); } int solve() { int weight = 0; for(int i = 0; i < e; i++) { int cost = graph[..
보글보글소다
'분류 전체보기' 카테고리의 글 목록 (8 Page)