본문 바로가기

알고리즘9

[C/C++] 백준 1197: 최소 스패닝 트리 (Kruskal 알고리즘) https://www.acmicpc.net/problem/1197 1197번: 최소 스패닝 트리 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진다. 다음 E개의 줄에는 각 간선에 대한 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 정점과 B번 정점이 www.acmicpc.net 최소 스패닝 트리는 크게 프림의 알고리즘과 크루스칼 알고리즘을 통해 구현이 가능하다. 이 문제에서는 크루스칼 알고리즘을 이용하여 최소 스패닝 문제를 해결했다! 크루스칼(Kruskal 알고리즘)? 크루스칼 알고리즘의 가장 기본적인 아이디어는 사이클이 만들어지지 않는 한에서 간선을 가중치의 오름차순으로 정렬한 뒤, 스패닝 트리에 하나씩 추가하는 것이다. .. 2023. 10. 10.
[C/C++] 10844: 쉬운 계단 수 https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 뜻하지 않게 이 문제를 11057: 오르막 수를 풀고 그 다음에 바로 풀었더니 굉장히 빨리 풀었다! 오르막 수에 관한 코드 설명은 아래 링크와 같다. https://donggul-godsang.tistory.com/66 [C/C++] 11057: 오르막 수 최대한 점화식을 구하려고 생각하다보니 규칙을 발견하게 됐다! 다른 DP 문제와는 다르게 2차원 배열을 이용하여 DP를 저장해야지 풀려서 생각하는데 조금 시간이 걸린 것 같다. dp[n][n]에서 첫번 donggul-godsang.tistory.com 이 문제.. 2023. 8. 30.
[C] 9663: N-Queen 구현은 다음과 같이 진행했다. 1. 퀸이 놓이면 퀸이 공격할 수 있는 자리들에 chess배열에 1을 추가하여(색칠하여) 저장하였다. 1-1.이때 가로 세로는 그냥 칠하고 (겹치는거 빼줌), 대각선을 색칠할 때는 while문을 이용하여 색칠해줬다. 이때 색칠하는 방법은 전에 풀었던 "토마토"문제와 같이 미리 x,y좌표로 갈 수 있는 경우의 수를 배열로 저장하고 (x,y_coordinate) for문을 이용해 구현했다. 1-2 이때 그래프의 범위를 벗어나면 for문을 빠져나오도록 했다 2. 이후 빈 공간에 queen을 배치할 수 있는지 판단하고 배치 가능하면 color함수를 재귀적으로 호출한다. 2-1. 이때 계속 덧칠하면서 color을 호출했기 때문에 호출 후 return하면 다시 지워주기 위한 remov.. 2023. 8. 6.
[C] 14500: 테트로미노 이 문제는 효율적이게 풀 수 있는지는 모르겠지만 그냥 bruteforce로 풀었다. 하늘색 막대기는 2가지 경우의 수 노란색 막대기는 1가지 경우의 수 초록색 막대기와 분홍색 막대기는 4가지 경우의 수 주황색 막대기는 8가지 경우의 수가 있고 각각의 경우의 수 중에 최대 값을 구하면 됐다. 그리고 구역을 나누어서 최대한 for문의 개수가 적게 만들도록 노력했다. 사실 코드가 너무 길고 구현이 단순해서 쉽게 안풀릴 줄 알았는데 다행히 잘 풀렸다! 앞으로도 일단 그냥 코드를 짜보는 연습을 더 해야겠다 #include #include int arr[501][501]; int blue(int x_max,int y_max) { int max=0; int tmp; for(int j=1;jtmp3?tmp1:tmp3;.. 2023. 8. 1.