분류 전체보기
-
로그 분리 법칙FastAPI 2025. 10. 20. 00:31
[로그 레코드의 구조 및 동작 원리] Python의 로깅 시스템은 트리형 계층 구조로 되어있다.(root) ├── app │ ├── api │ │ └── chat │ └── service │ └── user root 로거가 존재하고 각 모듈 (파일) 별로 로거를 지정할 수 있다. 이때 로그가 하위 모듈(한 개의 파일)에서 발생했을 시, 해당 로그 레코드는 root logger까지 전달된다.이때 로그 레코드는 로그를 발생시킨 실제 위치(파일명, 함수명, 라인번호)만 기록되고,root logger까지 가는 도중 거친 부모 로거의 파일명/함수명은 찍히지 않는다. 즉, LogRecord 객체는 발생 시점의 컨텍스트만 담는다.로그 발생 그 순간의 컨텍스트(파일, 함수, 라인, ..
-
[백준 16724] 피리 부는 사나이백준/Union Find 2025. 10. 19. 19:10
경로 집합이 몇 개인지 구하는 문제이다. safe zone은 각 경로의 맨 마지막 도착지점에 만들어질텐데 그 도착지점을 구할 필요는 없다.따라서 모든 safe zone은 모든 경로 집합의 맨 마지막 노드에 만들어질테니, 경로의 종류가 몇개인지 구하면 된다. 따라서 Union Find + DFS로 구해주면 된다. 마지막에 모든 부모-자식 depth를 1로 만들어주기 위해서최종적인 경로압축을 위해 find_parent를 모든 노드에 수행해주고for (int i = 0; i unordered_set을 활용하여 몇 개의 집합이 존재하는지 구해주면 된다. #include #include #include #include #include using namespace std;#define SIZE 1001int N,..
-
[백준 1956] 운동백준/플로이드워셜 2025. 10. 18. 17:21
최단거리 + 사이클 문제라 사이클이라는 단어에 꽂혀서 방향을 잡는데 조금 시간이 걸렸다. 하지만 이 문제는 사이클을 구성하는 노드에 관한 문제도 아니고 그냥 사이클의 존재 유무에 대한 문제이다. 그리고 사이클의 거리는 A → B 거리 + B → A 거리로 표현할 수 있다. 따라서 플로이드워셜로 돌린 후 dist[A][B] 와 dist[B][A] 값이 유효할 경우 dist[A][B] + dist[B][A] 값을 구해서 계속 최신화하면 된다. 플로이드워셜로 모든 정점에서 모든 정점까지의 최단거리를 구한 후dist[A][B] + dist[B][A] 를 통해 사이클에 대한 최단거리를 구할 수 있다는 것이다.#include #include #include using namespace std;#define SIZ..
-
aiohttpFastAPI 2025. 10. 17. 02:08
FastAPI이므로 비동기 http client에 관심이 갈 수 밖에 없다. 비동기 http client에는 aiohttp.ClientSession과 httpx.AsyncClient를 사용하는 2가지 방법이 있음. [aiohttp]비동기 http 통신 처리를 하기 위해 만들어진 라이브러리오로지 비동기 http 처리만 지원한다.순수 비동기 함수로 빠르다. [httpx]동기 http 라이브러리인 requests의 업그레이드 버전으로 동기 + 비동기 모두 지원한다.하지만, 기능들이 많아 aiohttp보다 느리다.에러 핸들링 및 예외처리에 대한 지원을 세분하게 할 수 있다. 따라서 단순한 http 요청일때는 aiohttp를 사용하고에러처리 및 다양한 기능을 사용하고 싶을때는 httpx 라이브러리를 사용하면 된..
-
[백준 16236] 아기 상어백준/구현 and 시뮬레이션 2025. 10. 16. 01:11
BFS + 시뮬레이션 문제임 BFS 탐색했을때 가장 먼저 나오는 물고기를 먹으면 안됨.반례가 존재함.먹을 수 있는 물고기 모두 찾은 다음, 정렬 통해서 먹을 물고기 구해야함 #include #include #include #include #include #include #define SIZE 21using namespace std;int N, L, R;int map[SIZE][SIZE];// 상어가 가장 위 왼쪽부터 탐색할 수 있도록int dy[4] = {-1, 0, 0, 1};int dx[4] = {0, -1, 1, 0};int shark = 2;int eat = 0;int sharky, sharkx;struct comp{ bool operator()(const tuple &a, const tup..
-
[백준 17485] 진우의 달 여행백준/DP 2025. 10. 15. 02:03
두번 연속 같은 방향으로 못가니까맨 처음에는 아래와 같이 생각했다. 점화식 하나로 푼다고 생각하면2번 움직이기 전까지 생각해서특정 칸까지 도달할 수 있는 경우의 수는 총 4가지이다. 1. 직-오2. 직-왼3. 왼-오4. 오-왼 그래서 점화식을 세워서 4개에 대한 min 연산을 수행하면 되겠구나 했는데 여기서 고려해야할 점이 생긴다. 바로 2번전의 칸에 대한 dp값이 어떻게 움직여서 온 것인지 알 수 있는 방법이 없다는 것이다. 그래서 각 칸마다 특정 방향으로 도착했을때에 대한 최소값을 구해야한다. 그래서 3차원 배열을 사용했다. 이 부분만 깨달으면 점화식은 생각보다 빨리 작성할 수 있다. 우선 직선은 예외가 없다.하지만 각 줄의 맨 왼쪽칸과 맨 오른쪽 칸은 예외가 발생한다.오른쪽으로 움직여서 맨 왼쪽칸에..
-
[백준 16234] 인구 이동백준/구현 and 시뮬레이션 2025. 10. 13. 21:45
확실히 시뮬 문제는 핵심 로직 외 시뮬레이션 과정 자체를 구현하는 곳을 신경써줘야한다. 격좌 그래프 BFS 문제로 인구 이동이 가능한 조건을 만족했을시에만 방문처리를 해줘야하는게 핵심이다.연합이 된 나라들의 좌표를 미리 저장해놓은 뒤, BFS가 끝났을때 각 나라의 인구수를 다시 계산해주면 된다. 더 이상 인구이동이 일어나지 않는 경우는 함수의 반환값의 합을 통해 flag 역할을 할 수 있도록 했다. #include #include #include #include #include #define SIZE 51using namespace std;int N, L, R;int map[SIZE][SIZE];int dy[4] = {-1, 1, 0, 0};int dx[4] = {0, 0, -1, 1};int solve..
-
[백준 14502] 연구소백준/구현 and 시뮬레이션 2025. 10. 12. 17:45
생각보다 얘를 먹으면서 풀었다. 벽 3개를 놓을때 DFS로 조합론 구현해서 중복없이 세운 뒤벽 3개를 만족했을 시, check 함수를 통해 안전영역의 최대 크기를 계산하고 업데이트하게 하였다. [ 특정 좌표(row, col)를 정수값으로 표현 ] 벽을 3개 세우는 과정에서 map의 어느 부분부터 시작해서 채울지를 표현해야했다.이때 그냥 특정 좌표 (row, col)을 정수값을 표현하여 계산했다. // N = 3 M = 4 // 0 1 2 3 // 4 5 6 7 // 8 9 10 11 for (int i = start; i [ 2차원 배열의 깊은 복사 ] 중요한 것은 2차원 배열 즉, map에 대한 관리였다.그냥 인자로 넘겨버리면 얕은 복사, 즉 포인터가 인자로 전달되어 기존 ..