본문 바로가기

Algorithm

(51)
백준 1012번 유기농 배추 (c++) BFS문제입니다. 모든 지역을 방문하고, 배추가 있는 지역에 방문했을 때, BFS로 연결되어있는 모든 지역을 다 방문합니다. 배추가 있는 지역을 처음 방문할 때의 횟수를 정답으로 출력해주면 됩니다. #include #include using namespace std; int hatake[55][55]; bool visited[55][55]; int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, 1, -1}; int m, n, k; bool isSafe(int x, int y) { if (x >= 0 && x = 0 && y > t; while (t--) { cin >> m >> n >> k; for (int i = 0; i < n; i++) { for (int j = 0; j..
백준 17626번 four squares (c++) 어떤 수를 제곱수의 합으로 표현할 때, 사용되는 최소 제곱수의 개수를 구하는 문제이다. 다이나믹 프로그래밍으로 문제를 해결할 수 있다. n = (0, 1, 2, 3, ... n -1) + k2(k는 k2 > n; dp[0] = 0; dp[1] = 1; for (int i = 2; i
백준 11049 행렬 곱셈 순서 행렬의 곱셈 순서에 따라서 필요한 곱셈의 수가 달라진다. 최소 곱셈 횟수를 찾는 것이 문제의 목표이다. 어떤 n이 주어졌을 때, A0A1...An-1에서 모든 곱셈의 경우를 보고 그 최소값을 찾아야된다. 곱셈의 결과를 저장하는 배열을 dp라고하고 dp[i][j]를 i부터 j번째까지의 최소 곱셈의 수를 저장한다. 행렬의 행과 열의 값을 페어로 저장하여, a에 저장한다. a[i].first는 Ai행렬의 행, a[i].second는 Ai행렬의 열의 값을 가진다. 이때 dp[i][i] = 0이고, 1 n; for (int i = 0; i > l >> r; a.push_back(make_pair(l, r)); dp[i][i] = 0; } for (int ..