목록전체 글 (271)
정화 코딩

https://www.acmicpc.net/problem/28296 다음과 같은 순서로 생각하면 이해가 그나마 좀 쉬운 것 같다. 일단 두 창고를 연결하는 경로상의 도로 중 가장 작은 가중치가 그 경로의 상한선이 되고, 두 창고를 연결하는 여러 경로가 있을 때 상한선이 가장 큰 경로를 택한다.즉, 두 창고를 연결하는 경로가 여러 개 있을 때, 가중치가 작은 도로가 포함되지 않도록 하는 것이 최적이다. 이를 통해 가중치가 작은 간선들은 필요없고 최대 스패닝 트리를 그렸을 때 거기에 포함된 도로들만 사용하면 된다는 것을 알 수 있다. 최대 스패닝 트리를 그려야 하므로 가중치가 큰 도로부터 보면 된다. 가중치가 큰 도로부터 보면 현재 보고 있는 도로가 지금까지 봐온 도로 중 가중치가 가장 작은 도로라는 것이..

https://www.acmicpc.net/problem/20040 유니온 파인드를 이용하여 간선을 하나씩 추가하면서 사이클이 처음 생기는 순간만 찾아주면 된다.a와 b가 이미 같은 집합인데 a와 b를 연결하는 간선이 들어오면 사이클이 생긴 것이라고 판단하면 된다. #include #include using namespace std;int n, m;vector parent;int find(int a) { if (parent[a] == a) return a; else return parent[a] = find(parent[a]);}int unite(int a, int b) { a = find(a); b = find(b); if (a != b) { parent[b] =..

https://www.acmicpc.net/problem/28300 우선 이 문제의 포인트는 행이동/열이동과 스왑 연산을 분리하여 각각 처리해주는 것이다. 스왑 연산은 어떤 수와 어떤 수를 스왑하는지만 잘 저장해둔다면 어느 순서에서 하든 상관없기 때문에, 일단 무시하고 마지막에 한번에 처리해주도록 하자. 그렇다면 지금은 행이동/열이동만 순서대로 보면서 처리해주겠다. 이것들은 순서가 중요하기 때문에 한번에 모아서 처리하거나 하기 어렵다. 그렇다고 n*n 배열에서 실제로 행이동과 열이동을 매번 시켜주면 많은 시간이 걸릴 것이다. 잘 생각해보면 이렇게 행이동/열이동으로는 저 4개의 수끼리의 위치는 절대 바뀔 수 없다. 행이동과 열이동은 무조건 짝수 행/열 또는 홀수 행/열에 대해서만 이루어지기 때문이다. 그렇..

프로젝트 소개우리 팀 찹쌀떡은 졸업 프로젝트로 "취업 준비자를 위해 gpt-4o를 이용하여 자기소개서를 분석하고 RAG 기반으로 예상 질문을 제공하는 면접 시뮬레이션 서비스" PreView를 만들고자 한다. 개발을 진행함에 따라 AI 처리 전용 서버의 필요성을 느껴, 별도의 AI 서버를 구축하고 RAG 초기 세팅 및 백엔드 API 연동까지 진행하게 되었다. 이 글에서 그 전체 과정을 정리해보고자 한다.https://github.com/Chapssal-tteok Chapssal-tteokChapssal-tteok has 4 repositories available. Follow their code on GitHub.github.com AI 서버 레포지토리 생성 및 초기 세팅https://github.com..

WSL(Windows Subsystem for Linux) 설치 및 실행WSL: Windows에서 리눅스를 실행할 수 있게 해주는 기능wsl --install Ubuntu에서 Redis 설치 및 실행sudo apt updatesudo apt install redis-server -ysudo service redis-server start Redis 시작 후 정상 작동하는지 확인redis-cliSET hello "hello world"GET hello Spring Boot에서 Redis 연결 설정dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis'}build.gradle 파일에 위와 같이 Redis..

https://www.acmicpc.net/problem/1005 게임 개발과 완전 비슷한 문제이다.이 문제에 대한 설명과 풀이는 이 글에 있다. #include #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { int n, k, w; cin >> n >> k; vector> g(n + 1); vector time(n + 1); vector totaltime(n + 1); vector indegree(n +..

https://www.acmicpc.net/problem/2623 기본적인 위상 정렬 문제이다.사이클 유무는 ans 배열의 원소 개수가 n인지 아닌지로 판단하였다. #include #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; cin >> n >> m; vector> g(n + 1); vector indegree(n + 1, 0); queue q; vector ans; while (m--) { int x; cin >> x; int pre, cur; ..

https://www.acmicpc.net/problem/9466 이 문제는 사이클을 판단하는 문제이다. 사이클이 있는지 없는지를 판단하기 위해서 chk 배열과 v 변수를 두었다.v 변수는 현재가 몇번째 연결 그래프인지를 저장하는 변수이고, chk 배열은 해당 노드를 방문 했는지 여부와 몇번째 연결 그래프에서 방문했는지를 저장하는 배열이다. 해당 연결 그래프에서 사이클이 존재하는지를 판단했다면 이제 어느 노드부터 어느 노드까지가 사이클인지 알아야 한다.이를 위해서 지나온 경로를 기록한 후 사이클의 기준점까지 역주척하면서 체크하면 되는데, 두 가지 방법이 있다. 하나는 재귀 함수의 콜 스택을 사용하는 방법이고, 다른 하나는 명시적 스택(stack 자료구조)을 사용하는 방법이다. 1. 재귀 함수 콜 스..