본문 바로가기

전체 글213

백준 2178 1. 문제 이해 이 문제는 BFS를 응용해서 풀 수 있다. 시작지점부터 인접한 곳으로 이동할 때마다 거리를 1씩 증가시키면 된다. 연결된 칸들을 모두 방문한 경우 각 끝지점에서 시작지점을 빼면 시작지점으로 부터 몇 칸 이동했는지 알 수 있다. 이걸 이용해서 (1,1) ~ (N,M) 까지의 거리를 구할 수 있다. 2. 코드 #include #include #include using namespace std; #define X first #define Y second // 상하좌우 네 방향을 고정 // (1,0) : 우, (0,1) : 상, (-1,0) : 좌, (0,-1) : 하 int dx[4] = { 1,0,-1,0 }; int dy[4] = { 0,1,0,-1 }; // 배열의 크기를 문제와 딱 맞게.. 2024. 4. 18.
BFS(Breadth First Search) 1. BFS 설명 다차원 배열에서 각 칸을 방문할 때 너비를 우선으로 방문하는 알고리즘 원래 BFS는 그래프라는 자료구조에서 모든 노드를 방문하기 위한 알고리즘이지만 그래프 자료구조를 알아야 되기 때문에 다차원 배열에서의 BFS를 예시로 설명함 1. 시작하는 지점을 방문했다는 표시를 남기고 큐에 넣음 2. 큐에 있는 front를 pop하고 pop한 원소의 상하좌우 칸을 확인 -> 파란색이면서 아직 방문하지 않은 칸이 있으면 방문했다는 표시를 남기고 큐에 넣음 3. 2번을 계속해서 실행하다가 큐가 비어(front 할 것이 없음)있다면 BFS 알고리즘 종료 BFS의 시간복잡도는 방문했다는 표시를 남기기 때문에 모든 칸은 큐에 1번씩만 들어가게 되고 칸이 N개일 때 O(N)이 된다. 다차원 배열에서 행이 R개.. 2024. 4. 18.
멀티 쓰레드 프로그래밍 프로그램 실행되기 전까지 HDD, SDD 같은 보조기억장치에 저장되어 있는 데이터 덩어리 프로세스 프로그램이 메모리에 적재되어서 실행될 때 프로세스가 만들어짐 * 백그라운드 프로세스 : 사용자와 상호작용하지 않는 프로세스로 데몬(유닉스 체계), 서비스(윈도우)가 있다. 메모리에 상주하면서 특정요청이 오면 즉시 대응할 수 있도록 대기중인 프로세스이다. PCB(Process Control Block) 프로세스가 실행되기 위해서 CPU를 필요로 하는데 CPU 자원은 한정되어 있으므로 모든 프로세스가 CPU를 점유할 수 없다. 프로세스들은 차례대로 한정된 시간만큼 CPU를 점유하고 한정된 시간이 끝나면 CPU 점유권을 다른 프로세스에게 넘긴다. 이러한 방식을 운영체제는 PCB를 이용해서 빠르게 번갈아 수행하는 .. 2024. 4. 17.
백준 1021 난이도 : 중상 해결 방법 : 풀이 참고(https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x07/solutions/1021.cpp) #include #include #include using namespace std; int N, M; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> M; deque DQ; // 원소의 위치 for (int i = 1; i > position; while (DQ.front() != position) { // front에 뽑아내려고 하는 원소의 위치가 없는 경우 // 2번과 3번에서 어떤 연산을 수행하는게 더 최솟값을 구할수 있는.. 2024. 4. 11.
몬스터 반경 내의 플레이어 감지 사전 지식1. 벡터의 크기 구하는 방법 직선상에 빈틈이 없도록 실수 집합으로 모든 수를 표시한 것을 수직선이라고 한다.0을 기준으로 음수와 양수라는 두 개의 체계가 서로 대칭되어 있고, 원점에서부터 크기와 방향을 가진 화살표로 표현할 수 있다.수가 지니는 방향은 부호로 나타내며 크기는 원점으로부터의 거리를 의미한다.ex) "-.. 2024. 4. 3.
메모리 주소 공간 메모리 주소체계는 논리주소와 물리주소로 나뉜다. 논리주소는 실행 중인 프로그램 각각에게 부여된 주소로 X번지 주소는 논리주소 상에서 여러 개 존재할 수 있다. 물리주소는 데이터가 실제로 저장된 하드웨어상(메모리)의 주소로 X번지는 오직 하나만 존재한다. 그러면 동일한 논리주소가 여러개 있는데 어떻게 그 논리주소를 물리주소로 변환하는 걸까? MMU(메모리 관리 장치)라는 하드웨어가 논리주소를 물리주소로 변환을 해준다. MMU는 베이스 레지스터(메모리에 프로그램이 저장되어 있는 시작주소)라는 값을 저장하고 있는데 사용자가 논리주소로 100번지의 값을 삭제해 달라고 요청하면 베이스 레지스터로부터 100만큼 떨어진 곳으로 이동하게 된다. ex) 실행중인 LoL이 메모리에서 15000 ~ 20000 주소까지 사용.. 2024. 4. 1.